Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Class Name Prefix from Nested Classes #1980

Merged
merged 22 commits into from
Dec 1, 2022
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4292b85
remove parent name prefix from inner classes
ramsessanchez Nov 15, 2022
d6b645c
Config/query class refrences match new name
ramsessanchez Nov 17, 2022
a000107
- removes add inner classes that noops with default settings
baywet Nov 17, 2022
de0d1bf
- moves add inner class unit test to Go
baywet Nov 17, 2022
6ed9b49
Update src/Kiota.Builder/Refiners/JavaRefiner.cs
ramsessanchez Nov 17, 2022
159ff0b
Apply suggestions from code review
ramsessanchez Nov 17, 2022
89a5022
change the way we set httpMethod
ramsessanchez Nov 18, 2022
82f5146
refactor put statements
ramsessanchez Nov 18, 2022
ea8de1a
missing semicolon
ramsessanchez Nov 18, 2022
12eed73
remove more anonymous methods and comments
ramsessanchez Nov 19, 2022
a5e18ab
semicolon
ramsessanchez Nov 19, 2022
8a70a84
test update
ramsessanchez Nov 21, 2022
1f7dd26
remove equals sign
ramsessanchez Nov 21, 2022
59d91be
Merge pull request #1982 from microsoft/java/requestInfoInstantiation…
ramsessanchez Nov 21, 2022
f4582f2
consolidate loops
ramsessanchez Nov 21, 2022
4c38061
Update src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs
ramsessanchez Nov 22, 2022
cad9de4
Update src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs
ramsessanchez Nov 22, 2022
be57a57
Update CHANGELOG.md
ramsessanchez Nov 22, 2022
578563f
Merge branch 'main' into removeParentNamePrefix-Java
ramsessanchez Nov 22, 2022
122784e
Merge branch 'main' into removeParentNamePrefix-Java
baywet Nov 29, 2022
241e1e7
Merge branch 'main' into removeParentNamePrefix-Java
baywet Nov 30, 2022
2041c3c
- fixes unit test for java executor method
baywet Nov 30, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Kiota.Builder/KiotaBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1412,7 +1412,7 @@ internal static void AddSerializationMembers(CodeClass model, bool includeAdditi
}
private CodeClass CreateOperationParameterClass(OpenApiUrlTreeNode node, OperationType operationType, OpenApiOperation operation, CodeClass parentClass)
{
var parameters = node.PathItems[Constants.DefaultOpenApiLabel].Parameters.Union(operation.Parameters).Where(p => p.In == ParameterLocation.Query);
var parameters = node.PathItems[Constants.DefaultOpenApiLabel].Parameters.Union(operation.Parameters).Where(static p => p.In == ParameterLocation.Query);
if(parameters.Any()) {
var parameterClass = parentClass.AddInnerClass(new CodeClass
{
Expand Down
1 change: 0 additions & 1 deletion src/Kiota.Builder/Refiners/CSharpRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
AddRawUrlConstructorOverload(generatedCode);
AddPropertiesAndMethodTypesImports(generatedCode, false, false, false);
AddAsyncSuffix(generatedCode);
AddInnerClasses(generatedCode, false, string.Empty);
cancellationToken.ThrowIfCancellationRequested();
AddParsableImplementsForModelClasses(generatedCode, "IParsable");
CapitalizeNamespacesFirstLetters(generatedCode);
Expand Down
2 changes: 1 addition & 1 deletion src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ internal void DisableActionOf(CodeElement current, params CodeParameterKind[] ki
CrawlTree(current, x => DisableActionOf(x, kinds));
}
internal void AddInnerClasses(CodeElement current, bool prefixClassNameWithParentName, string queryParametersBaseClassName = "", bool addToParentNamespace = false) {
if(current is CodeClass currentClass) {
if(current is CodeClass currentClass && currentClass.IsOfKind(CodeClassKind.RequestBuilder)) {
var parentNamespace = currentClass.GetImmediateParentOfType<CodeNamespace>();
var innerClasses = currentClass
.Methods
Expand Down
3 changes: 1 addition & 2 deletions src/Kiota.Builder/Refiners/GoRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
cancellationToken.ThrowIfCancellationRequested();
AddInnerClasses(
generatedCode,
true,
null);
true);
ReplaceIndexersByMethodsWithParameter(
generatedCode,
generatedCode,
Expand Down
67 changes: 64 additions & 3 deletions src/Kiota.Builder/Refiners/JavaRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
return Task.Run(() => {
cancellationToken.ThrowIfCancellationRequested();
LowerCaseNamespaceNames(generatedCode);
AddInnerClasses(generatedCode, false, string.Empty);
RemoveClassNamePrefixFromNestedClasses(generatedCode);
InsertOverrideMethodForRequestExecutorsAndBuildersAndConstructors(generatedCode);
ReplaceIndexersByMethodsWithParameter(generatedCode, generatedCode, true);
cancellationToken.ThrowIfCancellationRequested();
Expand Down Expand Up @@ -298,9 +298,70 @@ private void InsertOverrideMethodForRequestExecutorsAndBuildersAndConstructors(C

CrawlTree(currentElement, InsertOverrideMethodForRequestExecutorsAndBuildersAndConstructors);
}
private static void RemoveClassNamePrefixFromNestedClasses(CodeElement currentElement) {
if(currentElement is CodeClass currentClass && currentClass.IsOfKind(CodeClassKind.RequestBuilder)) {
var prefix = currentClass.Name;
var innerClasses = currentClass
.Methods
.SelectMany(static x => x.Parameters)
.Where(static x => x.Type.ActionOf && x.IsOfKind(CodeParameterKind.RequestConfiguration))
.SelectMany(static x => x.Type.AllTypes)
.Select(static x => x.TypeDefinition)
.OfType<CodeClass>();

// Namespaces in Java by convention are all lower case, like:
// com.microsoft.kiota.serialization
// ensure we do not miss out the types present in request configuration objects i.e. the query parameters
var nestedQueryParameters = innerClasses
.SelectMany(static x => x.Properties)
.Where(static x => x.IsOfKind(CodePropertyKind.QueryParameters))
.SelectMany(static x => x.Type.AllTypes)
.Select(static x => x.TypeDefinition)
.OfType<CodeClass>();

var nestedClasses = new List<CodeClass>();
nestedClasses.AddRange(innerClasses);
nestedClasses.AddRange(nestedQueryParameters);

foreach(var innerClass in nestedClasses) {
if(innerClass.Name.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
innerClass.Name = innerClass.Name[prefix.Length..];

if(innerClass.IsOfKind(CodeClassKind.RequestConfiguration))
RemovePrefixFromQueryProperties(innerClass, prefix);
}
RemovePrefixFromRequestConfigParameters(currentClass, prefix);
}
CrawlTree(currentElement, x => RemoveClassNamePrefixFromNestedClasses(x));
}
private static void RemovePrefixFromQueryProperties(CodeElement currentElement, String prefix) {
if(currentElement is CodeClass currentClass) {
var queryProperty = currentClass
.Properties
.Where(static x=> x.IsOfKind(CodePropertyKind.QueryParameters))
.Select(static x => x.Type)
.OfType<CodeTypeBase>()
.Where(x => x.Name.StartsWith(prefix, StringComparison.OrdinalIgnoreCase));

foreach(var property in queryProperty) {
property.Name = property.Name[prefix.Length..];
}
}
}
private static void RemovePrefixFromRequestConfigParameters(CodeElement currentElement, String prefix) {
if(currentElement is CodeClass currentClass) {
var parameters = currentClass
.Methods
.SelectMany(static x => x.Parameters)
.Where(static x => x.Type.ActionOf && x.IsOfKind(CodeParameterKind.RequestConfiguration))
.Select(static x=> x.Type)
.OfType<CodeTypeBase>()
.Where(x => x.Name.StartsWith(prefix, StringComparison.OrdinalIgnoreCase));


foreach(var parameter in parameters) {
parameter.Name = parameter.Name[prefix.Length..];
}
}
}
private static void LowerCaseNamespaceNames(CodeElement currentElement) {
if (currentElement is CodeNamespace codeNamespace)
{
Expand Down
1 change: 0 additions & 1 deletion src/Kiota.Builder/Refiners/ShellRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
);
AddPropertiesAndMethodTypesImports(generatedCode, false, false, false);
cancellationToken.ThrowIfCancellationRequested();
AddInnerClasses(generatedCode, false);
AddParsableImplementsForModelClasses(generatedCode, "IParsable");
CapitalizeNamespacesFirstLetters(generatedCode);
cancellationToken.ThrowIfCancellationRequested();
Expand Down
28 changes: 28 additions & 0 deletions tests/Kiota.Builder.Tests/Refiners/GoLanguageRefinerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,34 @@ public class GoLanguageRefinerTests {
private readonly CodeNamespace root = CodeNamespace.InitRootNamespace();
#region CommonLangRefinerTests
[Fact]
public async Task AddsInnerClasses() {
var model = root.AddClass(new CodeClass {
Name = "model",
Kind = CodeClassKind.RequestBuilder
}).First();
var method = model.AddMethod(new CodeMethod {
Name = "method1",
ReturnType = new CodeType {
Name = "string",
IsExternal = true
}
}).First();
var parameter = new CodeParameter {
Name = "param1",
Kind = CodeParameterKind.RequestConfiguration,
Type = new CodeType {
Name = "SomeCustomType",
ActionOf = true,
TypeDefinition = new CodeClass {
Name = "SomeCustomType"
}
}
};
method.AddParameter(parameter);
await ILanguageRefiner.Refine(new GenerationConfiguration { Language = GenerationLanguage.Go }, root);
Assert.Equal(2, model.GetChildElements(true).Count());
}
[Fact]
public async Task TrimsCircularDiscriminatorReferences() {
var modelsNS = root.AddNamespace("models");
var baseModel = modelsNS.AddClass(new CodeClass {
Expand Down
28 changes: 0 additions & 28 deletions tests/Kiota.Builder.Tests/Refiners/JavaLanguageRefinerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -253,34 +253,6 @@ public async Task ReplacesIndexersByMethodsWithParameter() {
Assert.Single(collectionRequestBuilder.Properties);
}
[Fact]
public async Task AddsInnerClasses() {
var model = root.AddClass(new CodeClass {
Name = "model",
Kind = CodeClassKind.Model
}).First();
var method = model.AddMethod(new CodeMethod {
Name = "method1",
ReturnType = new CodeType {
Name = "string",
IsExternal = true
}
}).First();
var parameter = new CodeParameter {
Name = "param1",
Kind = CodeParameterKind.RequestConfiguration,
Type = new CodeType {
Name = "SomeCustomType",
ActionOf = true,
TypeDefinition = new CodeClass {
Name = "SomeCustomType"
}
}
};
method.AddParameter(parameter);
await ILanguageRefiner.Refine(new GenerationConfiguration { Language = GenerationLanguage.Java }, root);
Assert.Equal(2, model.GetChildElements(true).Count());
}
[Fact]
public async Task DoesNotKeepCancellationParametersInRequestExecutors()
{
var model = root.AddClass(new CodeClass
Expand Down