Skip to content

Commit 021fd9c

Browse files
committed
Review feedback
- Rename `--class-access-modifier` to `--type-access-modifier`. - Use `AccessModifier` enum instead of string and extend to `Internal` value. - Add `Access` property to `CodeClass` and `CodeEnum`. - Use `CSharpRefiner` to set `Access` property from configuration. - Extend `CodeClassDeclarationWriter` and `CodeEnumWriter` to write actual type access modifier.
1 parent feaa3d1 commit 021fd9c

20 files changed

+90
-49
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
- Added the ability to export the CodeDom to a file showing the public APIs to be generated in a given language [#4627](https://github.com/microsoft/kiota/issues/4627)
2424
- Added composed type serialization in Typescript [2462](https://github.com/microsoft/kiota/issues/2462)
2525
- Use authentication information available in the source OpenAPI document when generating a plugin manifest. [#5070](https://github.com/microsoft/kiota/issues/5070)
26-
- Control generated class access modifier for C# via `--class-access-modifier` flag. [#4788](https://github.com/microsoft/kiota/issues/4788)
26+
- Control generated type access modifier for C# via `--type-access-modifier` flag. [#4788](https://github.com/microsoft/kiota/issues/4788)
2727

2828
### Changed
2929

src/Kiota.Builder/CodeDOM/AccessModifier.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace Kiota.Builder.CodeDOM;
22
public enum AccessModifier
33
{
4+
Internal = 3,
45
Public = 2,
56
Protected = 1,
67
Private = 0

src/Kiota.Builder/CodeDOM/CodeClass.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public enum CodeClassKind
3333
public class CodeClass : ProprietableBlock<CodeClassKind, ClassDeclaration>, ITypeDefinition, IDiscriminatorInformationHolder, IDeprecableElement
3434
{
3535
private readonly ConcurrentDictionary<string, CodeProperty> PropertiesByWireName = new(StringComparer.OrdinalIgnoreCase);
36+
37+
public AccessModifier Access { get; set; } = AccessModifier.Public;
38+
3639
public bool IsErrorDefinition
3740
{
3841
get; set;

src/Kiota.Builder/CodeDOM/CodeEnum.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Kiota.Builder.CodeDOM;
88
public class CodeEnum : CodeBlock<BlockDeclaration, BlockEnd>, IDocumentedElement, ITypeDefinition, IDeprecableElement
99
{
1010
#pragma warning restore CA2227
11+
public AccessModifier Access { get; set; } = AccessModifier.Public;
1112
public bool Flags
1213
{
1314
get; set;

src/Kiota.Builder/Configuration/GenerationConfiguration.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO;
44
using System.Linq;
55
using System.Text.Json.Nodes;
6+
using Kiota.Builder.CodeDOM;
67
using Kiota.Builder.Extensions;
78
using Kiota.Builder.Lock;
89
using Microsoft.OpenApi.ApiManifest;
@@ -38,7 +39,7 @@ public ConsumerOperation? Operation
3839
public string ApiManifestPath { get; set; } = "apimanifest.json";
3940
public string OutputPath { get; set; } = "./output";
4041
public string ClientClassName { get; set; } = "ApiClient";
41-
public string? ClientClassAccessModifier { get; set; }
42+
public AccessModifier TypeAccessModifier { get; set; } = AccessModifier.Public;
4243
public string ClientNamespaceName { get; set; } = "ApiSdk";
4344
public string NamespaceNameSeparator { get; set; } = ".";
4445
public bool ExportPublicApi

src/Kiota.Builder/KiotaBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ public async Task ApplyLanguageRefinementAsync(GenerationConfiguration config, C
579579

580580
public async Task CreateLanguageSourceFilesAsync(GenerationLanguage language, CodeNamespace generatedCode, CancellationToken cancellationToken)
581581
{
582-
var languageWriter = LanguageWriter.GetLanguageWriter(language, config.OutputPath, config.ClientNamespaceName, config.ClientClassAccessModifier, config.UsesBackingStore, config.ExcludeBackwardCompatible);
582+
var languageWriter = LanguageWriter.GetLanguageWriter(language, config.OutputPath, config.ClientNamespaceName, config.UsesBackingStore, config.ExcludeBackwardCompatible);
583583
var stopwatch = new Stopwatch();
584584
stopwatch.Start();
585585
var codeRenderer = CodeRenderer.GetCodeRender(config);

src/Kiota.Builder/Lock/KiotaLock.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using Kiota.Builder.CodeDOM;
45
using Kiota.Builder.Configuration;
56

67
namespace Kiota.Builder.Lock;
@@ -31,9 +32,9 @@ public class KiotaLock
3132
/// </summary>
3233
public string ClientClassName { get; set; } = string.Empty;
3334
/// <summary>
34-
/// The class access modifier to use for the client classes.
35+
/// The type access modifier to use for the client types.
3536
/// </summary>
36-
public string? ClientClassAccessModifier { get; set; }
37+
public string TypeAccessModifier { get; set; } = string.Empty;
3738
/// <summary>
3839
/// The main namespace for this client.
3940
/// </summary>
@@ -106,10 +107,11 @@ public void UpdateGenerationConfigurationFromLock(GenerationConfiguration config
106107
{
107108
ArgumentNullException.ThrowIfNull(config);
108109
config.ClientClassName = ClientClassName;
109-
config.ClientClassAccessModifier = ClientClassAccessModifier;
110-
config.ClientNamespaceName = ClientNamespaceName;
111110
if (Enum.TryParse<GenerationLanguage>(Language, out var parsedLanguage))
112111
config.Language = parsedLanguage;
112+
config.ClientNamespaceName = ClientNamespaceName;
113+
if (Enum.TryParse<AccessModifier>(TypeAccessModifier, out var parsedAccessModifier))
114+
config.TypeAccessModifier = parsedAccessModifier;
113115
config.UsesBackingStore = UsesBackingStore;
114116
config.ExcludeBackwardCompatible = ExcludeBackwardCompatible;
115117
config.IncludeAdditionalData = IncludeAdditionalData;
@@ -137,7 +139,7 @@ public KiotaLock(GenerationConfiguration config)
137139
ArgumentNullException.ThrowIfNull(config);
138140
Language = config.Language.ToString();
139141
ClientClassName = config.ClientClassName;
140-
ClientClassAccessModifier = config.ClientClassAccessModifier;
142+
TypeAccessModifier = config.TypeAccessModifier.ToString();
141143
ClientNamespaceName = config.ClientNamespaceName;
142144
UsesBackingStore = config.UsesBackingStore;
143145
ExcludeBackwardCompatible = config.ExcludeBackwardCompatible;

src/Kiota.Builder/Refiners/CSharpRefiner.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ public override Task RefineAsync(CodeNamespace generatedCode, CancellationToken
110110
generatedCode,
111111
"IParseNode"
112112
);
113+
SetTypeAccessModifiers(generatedCode);
113114
}, cancellationToken);
114115
}
115116
protected static void DisambiguatePropertiesWithClassNames(CodeElement currentElement)
@@ -260,4 +261,19 @@ protected static void CorrectIndexerType(CodeIndexer currentIndexer)
260261
})
261262
},
262263
};
264+
265+
private void SetTypeAccessModifiers(CodeElement currentElement)
266+
{
267+
switch (currentElement)
268+
{
269+
case CodeClass currentClass:
270+
currentClass.Access = _configuration.TypeAccessModifier;
271+
break;
272+
case CodeEnum currentEnum:
273+
currentEnum.Access = _configuration.TypeAccessModifier;
274+
break;
275+
}
276+
277+
CrawlTree(currentElement, SetTypeAccessModifiers);
278+
}
263279
}

src/Kiota.Builder/Writers/CLI/CliWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace Kiota.Builder.Writers.Cli;
44
class CliWriter : CSharpWriter
55
{
6-
public CliWriter(string rootPath, string clientNamespaceName, string? clientClassAccessModifier) : base(rootPath, clientNamespaceName, clientClassAccessModifier)
6+
public CliWriter(string rootPath, string clientNamespaceName) : base(rootPath, clientNamespaceName)
77
{
88
var conventionService = new CSharpConventionService();
9-
AddOrReplaceCodeElementWriter(new CodeClassDeclarationWriter(conventionService, clientClassAccessModifier));
9+
AddOrReplaceCodeElementWriter(new CodeClassDeclarationWriter(conventionService));
1010
AddOrReplaceCodeElementWriter(new CodeBlockEndWriter(conventionService));
1111
AddOrReplaceCodeElementWriter(new CodeEnumWriter(conventionService));
1212
AddOrReplaceCodeElementWriter(new CodeIndexerWriter(conventionService));

src/Kiota.Builder/Writers/CSharp/CSharpConventionService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public override string GetAccessModifier(AccessModifier access)
9696
{
9797
return access switch
9898
{
99+
AccessModifier.Internal => "internal",
99100
AccessModifier.Public => "public",
100101
AccessModifier.Protected => "protected",
101102
_ => "private",

0 commit comments

Comments
 (0)