Skip to content

Commit ffef215

Browse files
authored
Expose public setter of namespace (#5928)
After the tsp namespace feature implementation in #5443, the namespace of model, enum and modelFactory have been changed from previous `XXX.Models` to `XXX`. For Azure plugin, we would like the namespace for model and enum to be `XXX.Models`. - Expose public setter of namespace, use visitor to update namespace of TypeProvider in Azure plugin. https://github.com/Azure/azure-sdk-for-net/pull/48197/files#diff-a6219e0492ffcf33fd4bb03be26f1e6bc04a84ee1e2723b4d58d5adbcdb031ef - Expose provider types to let sub-plugin identify. - Remove duplicated instance of ModelFactoryProvider - Remove Namespace property from CSharp
1 parent 2642f4a commit ffef215

File tree

13 files changed

+24
-31
lines changed

13 files changed

+24
-31
lines changed

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/ExtensibleEnumSerializationProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.TypeSpec.Generator.ClientModel.Providers
1212
/// <summary>
1313
/// This defines a class with extension methods for enums to convert an enum to its underlying value, or from its underlying value to an instance of the enum
1414
/// </summary>
15-
internal partial class ExtensibleEnumSerializationProvider : TypeProvider
15+
public partial class ExtensibleEnumSerializationProvider : TypeProvider
1616
{
1717
private readonly InputEnumType _enumType;
1818
private TypeProvider _enumProvider;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/FixedEnumSerializationProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace Microsoft.TypeSpec.Generator.ClientModel.Providers
1818
/// <summary>
1919
/// This defines a class with extension methods for enums to convert an enum to its underlying value, or from its underlying value to an instance of the enum
2020
/// </summary>
21-
internal class FixedEnumSerializationProvider : TypeProvider
21+
public class FixedEnumSerializationProvider : TypeProvider
2222
{
2323
private readonly InputEnumType _enumType;
2424
private TypeProvider _enumProvider;

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/src/Providers/RestClientProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public RestClientProvider(InputClient inputClient, ClientProvider clientProvider
4646

4747
protected override string BuildName() => _inputClient.Name.ToCleanName();
4848

49-
protected override string BuildNamespace() => ClientProvider.Namespace;
49+
protected override string BuildNamespace() => ClientProvider.Type.Namespace;
5050

5151
protected override PropertyProvider[] BuildProperties()
5252
{

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Configuration.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,6 @@ private static class Options
8989
/// </summary>
9090
internal bool ClearOutputFolder { get; private set; }
9191

92-
/// <summary>
93-
/// Whether we will generate model factory for this library.
94-
/// If true (default), the model factory will be generated. If false, the model factory will not be generated.
95-
/// </summary>
96-
internal bool GenerateModelFactory { get; private set; }
97-
9892
/// <summary>
9993
/// True if a sample project should be generated.
10094
/// </summary>

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/OutputLibrary.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Linq;
67
using Microsoft.TypeSpec.Generator.Providers;
@@ -16,6 +17,8 @@ public IReadOnlyList<TypeProvider> TypeProviders
1617
internal set => _typeProviders = value;
1718
}
1819

20+
internal Lazy<ModelFactoryProvider> ModelFactory { get; } = new(() => new ModelFactoryProvider(CodeModelPlugin.Instance.InputLibrary.InputNamespace.Models));
21+
1922
private static TypeProvider[] BuildEnums()
2023
{
2124
var input = CodeModelPlugin.Instance.InputLibrary.InputNamespace;
@@ -79,9 +82,9 @@ .. BuildModelFactory()
7982
];
8083
}
8184

82-
private static TypeProvider[] BuildModelFactory()
85+
private TypeProvider[] BuildModelFactory()
8386
{
84-
var modelFactory = ModelFactoryProvider.FromInputLibrary();
87+
var modelFactory = ModelFactory.Value;
8588
return modelFactory.Methods.Count > 0 ? [modelFactory] : [];
8689
}
8790
}

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/PostProcessing/GeneratedCodeWorkspace.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,10 @@ internal static Project AddDirectory(Project project, string directory, Func<str
211211
/// </summary>
212212
public async Task PostProcessAsync()
213213
{
214-
var modelFactory = ModelFactoryProvider.FromInputLibrary();
214+
var modelFactory = CodeModelPlugin.Instance.OutputLibrary.ModelFactory.Value;
215215
var postProcessor = new PostProcessor(
216216
[.. CodeModelPlugin.Instance.TypeFactory.UnionTypes, .. CodeModelPlugin.Instance.TypesToKeep],
217-
modelFactoryFullName: $"{modelFactory.Namespace}.{modelFactory.Name}");
217+
modelFactoryFullName: $"{modelFactory.Type.Namespace}.{modelFactory.Name}");
218218
switch (Configuration.UnreferencedTypesHandling)
219219
{
220220
case Configuration.UnreferencedTypesHandlingOption.KeepAll:

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Primitives/CSharpType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ internal CSharpType(
180180
_underlyingType = underlyingEnumType;
181181
}
182182

183-
public string Namespace { get; private init; }
183+
public string Namespace { get; set; }
184184
public string Name { get; private init; }
185185
public CSharpType? DeclaringType { get; private init; }
186186
public bool IsValueType { get; private init; }

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Providers/CanonicalTypeProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public CanonicalTypeProvider(TypeProvider generatedTypeProvider, InputType? inpu
3535

3636
protected override string BuildName() => _generatedTypeProvider.Name;
3737

38-
protected override string BuildNamespace() => _generatedTypeProvider.Namespace;
38+
protected override string BuildNamespace() => _generatedTypeProvider.Type.Namespace;
3939

4040
protected override TypeSignatureModifiers BuildDeclarationModifiers() => _generatedTypeProvider.DeclarationModifiers;
4141

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Providers/EnumProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Microsoft.TypeSpec.Generator.Providers
1111
{
12-
internal abstract class EnumProvider : TypeProvider
12+
public abstract class EnumProvider : TypeProvider
1313
{
1414
private readonly InputEnumType _inputType;
1515

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Providers/ModelFactoryProvider.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@
1414

1515
namespace Microsoft.TypeSpec.Generator.Providers
1616
{
17-
internal class ModelFactoryProvider : TypeProvider
17+
public class ModelFactoryProvider : TypeProvider
1818
{
1919
private const string ModelFactorySuffix = "ModelFactory";
2020
private const string AdditionalBinaryDataParameterName = "additionalBinaryDataProperties";
2121

2222
private readonly IEnumerable<InputModelType> _models;
2323

24-
public static ModelFactoryProvider FromInputLibrary() => new ModelFactoryProvider(CodeModelPlugin.Instance.InputLibrary.InputNamespace.Models);
25-
26-
private ModelFactoryProvider(IEnumerable<InputModelType> models)
24+
internal ModelFactoryProvider(IEnumerable<InputModelType> models)
2725
{
2826
_models = models;
2927
}

0 commit comments

Comments
 (0)