Skip to content

Commit b79a202

Browse files
committed
Review feedback 2
- Add `TypeAccessModifierOption` to client handlers. - Add `TypeAccessModifier` to workspace `ApiClientConfiguration` and `ApiClientConfigurationComparer`. - Add default value of `Public` for stringified `TypeAccessModifier` properties. - Add test case for `CSharpRefiner`. - Implement `IAccessibleElement` for `CodeClass` and `CodeEnum`.
1 parent 021fd9c commit b79a202

File tree

11 files changed

+68
-13
lines changed

11 files changed

+68
-13
lines changed

src/Kiota.Builder/CodeDOM/CodeClass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public enum CodeClassKind
3030
/// <summary>
3131
/// CodeClass represents an instance of a Class to be generated in source code
3232
/// </summary>
33-
public class CodeClass : ProprietableBlock<CodeClassKind, ClassDeclaration>, ITypeDefinition, IDiscriminatorInformationHolder, IDeprecableElement
33+
public class CodeClass : ProprietableBlock<CodeClassKind, ClassDeclaration>, ITypeDefinition, IDiscriminatorInformationHolder, IDeprecableElement, IAccessibleElement
3434
{
3535
private readonly ConcurrentDictionary<string, CodeProperty> PropertiesByWireName = new(StringComparer.OrdinalIgnoreCase);
3636

src/Kiota.Builder/CodeDOM/CodeEnum.cs

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

66
namespace Kiota.Builder.CodeDOM;
77
#pragma warning disable CA1711
8-
public class CodeEnum : CodeBlock<BlockDeclaration, BlockEnd>, IDocumentedElement, ITypeDefinition, IDeprecableElement
8+
public class CodeEnum : CodeBlock<BlockDeclaration, BlockEnd>, IDocumentedElement, ITypeDefinition, IDeprecableElement, IAccessibleElement
99
{
1010
#pragma warning restore CA2227
1111
public AccessModifier Access { get; set; } = AccessModifier.Public;

src/Kiota.Builder/Lock/KiotaLock.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class KiotaLock
3434
/// <summary>
3535
/// The type access modifier to use for the client types.
3636
/// </summary>
37-
public string TypeAccessModifier { get; set; } = string.Empty;
37+
public string TypeAccessModifier { get; set; } = "Public";
3838
/// <summary>
3939
/// The main namespace for this client.
4040
/// </summary>

src/Kiota.Builder/Refiners/CSharpRefiner.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,9 @@ private void SetTypeAccessModifiers(CodeElement currentElement)
266266
{
267267
switch (currentElement)
268268
{
269-
case CodeClass currentClass:
270-
currentClass.Access = _configuration.TypeAccessModifier;
271-
break;
272-
case CodeEnum currentEnum:
273-
currentEnum.Access = _configuration.TypeAccessModifier;
269+
case CodeClass:
270+
case CodeEnum:
271+
((IAccessibleElement)currentElement).Access = _configuration.TypeAccessModifier;
274272
break;
275273
}
276274

src/Kiota.Builder/WorkspaceManagement/ApiClientConfiguration.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5+
using Kiota.Builder.CodeDOM;
56
using Kiota.Builder.Configuration;
67
using Microsoft.OpenApi.ApiManifest;
78

@@ -15,6 +16,10 @@ public class ApiClientConfiguration : BaseApiConsumerConfiguration, ICloneable
1516
/// </summary>
1617
public string Language { get; set; } = string.Empty;
1718
/// <summary>
19+
/// The type access modifier to use for the client types.
20+
/// </summary>
21+
public string TypeAccessModifier { get; set; } = "Public";
22+
/// <summary>
1823
/// The structured mime types used for this client.
1924
/// </summary>
2025
#pragma warning disable CA1002
@@ -64,6 +69,7 @@ public ApiClientConfiguration(GenerationConfiguration config) : base(config)
6469
{
6570
ArgumentNullException.ThrowIfNull(config);
6671
Language = config.Language.ToString();
72+
TypeAccessModifier = config.TypeAccessModifier.ToString();
6773
ClientNamespaceName = config.ClientNamespaceName;
6874
UsesBackingStore = config.UsesBackingStore;
6975
ExcludeBackwardCompatible = config.ExcludeBackwardCompatible;
@@ -84,6 +90,8 @@ public void UpdateGenerationConfigurationFromApiClientConfiguration(GenerationCo
8490
config.ClientNamespaceName = ClientNamespaceName;
8591
if (Enum.TryParse<GenerationLanguage>(Language, out var parsedLanguage))
8692
config.Language = parsedLanguage;
93+
if (Enum.TryParse<AccessModifier>(TypeAccessModifier, out var parsedTypeAccessModifier))
94+
config.TypeAccessModifier = parsedTypeAccessModifier;
8795
config.UsesBackingStore = UsesBackingStore;
8896
config.ExcludeBackwardCompatible = ExcludeBackwardCompatible;
8997
config.IncludeAdditionalData = IncludeAdditionalData;
@@ -97,6 +105,7 @@ public object Clone()
97105
var result = new ApiClientConfiguration
98106
{
99107
Language = Language,
108+
TypeAccessModifier = TypeAccessModifier,
100109
StructuredMimeTypes = [.. StructuredMimeTypes],
101110
ClientNamespaceName = ClientNamespaceName,
102111
UsesBackingStore = UsesBackingStore,

src/Kiota.Builder/WorkspaceManagement/ApiClientConfigurationComparer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public override bool Equals(ApiClientConfiguration? x, ApiClientConfiguration? y
2828
if (x.IncludeAdditionalData != y.IncludeAdditionalData) return false;
2929
if (!_stringComparer.Equals(x.ClientNamespaceName, y.ClientNamespaceName)) return false;
3030
if (!_stringComparer.Equals(x.Language, y.Language)) return false;
31+
if (!_stringComparer.Equals(x.TypeAccessModifier, y.TypeAccessModifier)) return false;
3132

3233
// slow deep comparison
3334
return _stringIEnumerableDeepComparer.Equals(x.DisabledValidationRules, y.DisabledValidationRules)
@@ -42,6 +43,7 @@ public override int GetHashCode([DisallowNull] ApiClientConfiguration obj)
4243
hash.Add(obj.DisabledValidationRules, _stringIEnumerableDeepComparer); // _stringIEnumerableDeepComparer orders
4344
hash.Add(obj.ClientNamespaceName, _stringComparer);
4445
hash.Add(obj.Language, _stringComparer);
46+
hash.Add(obj.TypeAccessModifier, _stringComparer);
4547
hash.Add(obj.ExcludeBackwardCompatible);
4648
hash.Add(obj.UsesBackingStore);
4749
hash.Add(obj.IncludeAdditionalData);

src/kiota/Handlers/Client/AddHandler.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.CommandLine.Invocation;
33
using System.Text.Json;
44
using Kiota.Builder;
5+
using Kiota.Builder.CodeDOM;
56
using Kiota.Builder.Configuration;
67
using Kiota.Builder.Extensions;
78
using Kiota.Builder.WorkspaceManagement;
@@ -27,6 +28,10 @@ public required Option<GenerationLanguage> LanguageOption
2728
{
2829
get; init;
2930
}
31+
public required Option<AccessModifier> TypeAccessModifierOption
32+
{
33+
get; init;
34+
}
3035
public required Option<string> DescriptionOption
3136
{
3237
get; init;
@@ -69,6 +74,7 @@ public override async Task<int> InvokeAsync(InvocationContext context)
6974
{
7075
string output = context.ParseResult.GetValueForOption(OutputOption) ?? string.Empty;
7176
GenerationLanguage language = context.ParseResult.GetValueForOption(LanguageOption);
77+
AccessModifier typeAccessModifier = context.ParseResult.GetValueForOption(TypeAccessModifierOption);
7278
string openapi = context.ParseResult.GetValueForOption(DescriptionOption) ?? string.Empty;
7379
bool backingStore = context.ParseResult.GetValueForOption(BackingStoreOption);
7480
bool excludeBackwardCompatible = context.ParseResult.GetValueForOption(ExcludeBackwardCompatibleOption);
@@ -90,6 +96,7 @@ public override async Task<int> InvokeAsync(InvocationContext context)
9096
Configuration.Generation.IncludeAdditionalData = includeAdditionalData;
9197
Configuration.Generation.Language = language;
9298
WarnUsingPreviewLanguage(language);
99+
Configuration.Generation.TypeAccessModifier = typeAccessModifier;
93100
Configuration.Generation.SkipGeneration = skipGeneration;
94101
Configuration.Generation.Operation = ConsumerOperation.Add;
95102
if (includePatterns.Count != 0)

src/kiota/Handlers/Client/EditHandler.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.CommandLine.Invocation;
33
using System.Text.Json;
44
using Kiota.Builder;
5+
using Kiota.Builder.CodeDOM;
56
using Kiota.Builder.Configuration;
67
using Kiota.Builder.Extensions;
78
using Kiota.Builder.WorkspaceManagement;
@@ -27,6 +28,10 @@ public required Option<GenerationLanguage?> LanguageOption
2728
{
2829
get; init;
2930
}
31+
public required Option<AccessModifier?> TypeAccessModifierOption
32+
{
33+
get; init;
34+
}
3035
public required Option<string> DescriptionOption
3136
{
3237
get; init;
@@ -69,6 +74,7 @@ public override async Task<int> InvokeAsync(InvocationContext context)
6974
{
7075
string output = context.ParseResult.GetValueForOption(OutputOption) ?? string.Empty;
7176
GenerationLanguage? language = context.ParseResult.GetValueForOption(LanguageOption);
77+
AccessModifier? typeAccessModifier = context.ParseResult.GetValueForOption(TypeAccessModifierOption);
7278
string openapi = context.ParseResult.GetValueForOption(DescriptionOption) ?? string.Empty;
7379
bool? backingStore = context.ParseResult.GetValueForOption(BackingStoreOption);
7480
bool? excludeBackwardCompatible = context.ParseResult.GetValueForOption(ExcludeBackwardCompatibleOption);
@@ -109,6 +115,8 @@ public override async Task<int> InvokeAsync(InvocationContext context)
109115
clientConfiguration.UpdateGenerationConfigurationFromApiClientConfiguration(Configuration.Generation, className);
110116
if (language.HasValue)
111117
Configuration.Generation.Language = language.Value;
118+
if (typeAccessModifier.HasValue)
119+
Configuration.Generation.TypeAccessModifier = typeAccessModifier.Value;
112120
if (backingStore.HasValue)
113121
Configuration.Generation.UsesBackingStore = backingStore.Value;
114122
if (excludeBackwardCompatible.HasValue)

src/kiota/KiotaClientCommands.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public static Command GetAddCommand()
3333
{
3434
var defaultConfiguration = new GenerationConfiguration();
3535
var languageOption = KiotaHost.GetLanguageOption();
36+
var typeAccessModifierOption = KiotaHost.GetTypeAccessModifierOption();
3637
var outputOption = KiotaHost.GetOutputPathOption(defaultConfiguration.OutputPath);
3738
var descriptionOption = KiotaHost.GetDescriptionOption(defaultConfiguration.OpenAPIFilePath, true);
3839
var namespaceOption = KiotaHost.GetNamespaceOption(defaultConfiguration.ClientNamespaceName);
@@ -50,6 +51,7 @@ public static Command GetAddCommand()
5051
descriptionOption,
5152
outputOption,
5253
languageOption,
54+
typeAccessModifierOption,
5355
clientNameOption,
5456
namespaceOption,
5557
logLevelOption,
@@ -67,6 +69,7 @@ public static Command GetAddCommand()
6769
DescriptionOption = descriptionOption,
6870
OutputOption = outputOption,
6971
LanguageOption = languageOption,
72+
TypeAccessModifierOption = typeAccessModifierOption,
7073
ClassOption = clientNameOption,
7174
NamespaceOption = namespaceOption,
7275
LogLevelOption = logLevelOption,
@@ -104,6 +107,7 @@ public static Command GetRemoveCommand()
104107
public static Command GetEditCommand()
105108
{
106109
var languageOption = KiotaHost.GetOptionalLanguageOption();
110+
var typeAccessModifierOption = KiotaHost.GetOptionalTypeAccessModifierOption();
107111
var outputOption = KiotaHost.GetOutputPathOption(string.Empty);
108112
var descriptionOption = KiotaHost.GetDescriptionOption(string.Empty);
109113
var namespaceOption = KiotaHost.GetNamespaceOption(string.Empty);
@@ -121,6 +125,7 @@ public static Command GetEditCommand()
121125
descriptionOption,
122126
outputOption,
123127
languageOption,
128+
typeAccessModifierOption,
124129
clientNameOption,
125130
namespaceOption,
126131
logLevelOption,
@@ -138,6 +143,7 @@ public static Command GetEditCommand()
138143
DescriptionOption = descriptionOption,
139144
OutputOption = outputOption,
140145
LanguageOption = languageOption,
146+
TypeAccessModifierOption = typeAccessModifierOption,
141147
ClassOption = clientNameOption,
142148
NamespaceOption = namespaceOption,
143149
LogLevelOption = logLevelOption,

src/kiota/KiotaHost.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,19 +343,26 @@ internal static Option<GenerationLanguage> GetLanguageOption()
343343
AddEnumValidator(languageOption, "language");
344344
return languageOption;
345345
}
346+
internal static Option<GenerationLanguage?> GetOptionalLanguageOption()
347+
{
348+
var languageOption = new Option<GenerationLanguage?>("--language", "The target language for the generated code files.");
349+
languageOption.AddAlias("-l");
350+
AddEnumValidator(languageOption, "language");
351+
return languageOption;
352+
}
346353
internal static Option<AccessModifier> GetTypeAccessModifierOption()
347354
{
348355
var accessOption = new Option<AccessModifier>("--type-access-modifier", "The type access modifier to use for the client types.");
349356
accessOption.AddAlias("--tam");
350357
AddEnumValidator(accessOption, "type-access-modifier");
351358
return accessOption;
352359
}
353-
internal static Option<GenerationLanguage?> GetOptionalLanguageOption()
360+
internal static Option<AccessModifier?> GetOptionalTypeAccessModifierOption()
354361
{
355-
var languageOption = new Option<GenerationLanguage?>("--language", "The target language for the generated code files.");
356-
languageOption.AddAlias("-l");
357-
AddEnumValidator(languageOption, "language");
358-
return languageOption;
362+
var accessOption = new Option<AccessModifier?>("--type-access-modifier", "The type access modifier to use for the client types.");
363+
accessOption.AddAlias("--tam");
364+
AddEnumValidator(accessOption, "type-access-modifier");
365+
return accessOption;
359366
}
360367
internal static Option<string> GetNamespaceOption(string defaultNamespaceName)
361368
{

0 commit comments

Comments
 (0)