Skip to content

Commit 53dfe4e

Browse files
authored
[Azure Mgmt Generator] Add ProviderConstantsProvider to generate ProviderConstants.cs files (Azure#51116)
1 parent e8c9eae commit 53dfe4e

File tree

5 files changed

+61
-3
lines changed

5 files changed

+61
-3
lines changed

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/ManagementOutputLibrary.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public class ManagementOutputLibrary : AzureOutputLibrary
2929
private PageableWrapperProvider? _asyncPageableWrapper;
3030
internal PageableWrapperProvider AsyncPageableWrapper => _asyncPageableWrapper ??= new PageableWrapperProvider(true);
3131

32+
private ProviderConstantsProvider? _providerConstants;
33+
internal ProviderConstantsProvider ProviderConstants => _providerConstants ??= new ProviderConstantsProvider();
34+
3235
private IReadOnlyList<ResourceClientProvider>? _resourceClients;
3336
internal IReadOnlyList<ResourceClientProvider> ResourceClients => _resourceClients ??= BuildResources();
3437

@@ -153,6 +156,7 @@ protected override TypeProvider[] BuildTypeProviders()
153156
.. base.BuildTypeProviders().Where(t => t is not SystemObjectModelProvider),
154157
ArmOperation,
155158
ArmOperationOfT,
159+
ProviderConstants,
156160
.. resources,
157161
.. collections,
158162
.. extensions,

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Providers/MockableResourceProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,9 @@ private static Dictionary<InputClient, RestClientInfo> BuildRestClientInfos(IRea
6767
MethodSignatureModifiers.Private,
6868
typeof(ClientDiagnostics),
6969
ResourceHelpers.GetClientDiagnosticsPropertyName(restClientProvider.Name),
70-
// TODO -- here we either need to use the corresponding ResourceType.Namespace or ProviderConstants.DefaultProviderNamespace, pending on https://github.com/Azure/azure-sdk-for-net/issues/50593
7170
new ExpressionPropertyBody(
7271
clientDiagnosticsField.Assign(
73-
New.Instance(typeof(ClientDiagnostics), Literal(enclosingType.Type.Namespace), Literal("TODO"), thisResource.Diagnostics()),
72+
New.Instance(typeof(ClientDiagnostics), Literal(enclosingType.Type.Namespace), ProviderConstantsProvider.DefaultProviderNamespace, thisResource.Diagnostics()),
7473
nullCoalesce: true)),
7574
enclosingType);
7675

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using Azure.Core.Pipeline;
5+
using Microsoft.TypeSpec.Generator.Expressions;
6+
using Microsoft.TypeSpec.Generator.Primitives;
7+
using Microsoft.TypeSpec.Generator.Providers;
8+
using System.IO;
9+
using static Microsoft.TypeSpec.Generator.Snippets.Snippet;
10+
11+
namespace Azure.Generator.Management.Providers
12+
{
13+
internal class ProviderConstantsProvider : TypeProvider
14+
{
15+
private const string DefaultProviderNamespaceName = "DefaultProviderNamespace";
16+
17+
public static ValueExpression DefaultProviderNamespace => Static(ManagementClientGenerator.Instance.OutputLibrary.ProviderConstants.Type).Property(DefaultProviderNamespaceName);
18+
19+
protected override string BuildName() => "ProviderConstants";
20+
21+
protected override string BuildRelativeFilePath() => Path.Combine("src", "Generated", $"{Name}.cs");
22+
23+
protected override TypeSignatureModifiers BuildDeclarationModifiers() => TypeSignatureModifiers.Internal | TypeSignatureModifiers.Static;
24+
25+
protected override PropertyProvider[] BuildProperties()
26+
{
27+
var defaultProviderNamespaceProperty = new PropertyProvider(
28+
null,
29+
MethodSignatureModifiers.Public | MethodSignatureModifiers.Static,
30+
typeof(string),
31+
DefaultProviderNamespaceName,
32+
new ExpressionPropertyBody(Static<ClientDiagnostics>().Invoke(nameof(ClientDiagnostics.GetResourceProviderNamespace), [TypeOf(Type).Property(nameof(System.Type.Assembly))])),
33+
this);
34+
35+
return [defaultProviderNamespaceProperty];
36+
}
37+
}
38+
}

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Extensions/MockableMgmtTypeSpecSubscriptionResource.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/ProviderConstants.cs

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)