From e6e7fbc6cd19266f60f4afbd4455256716783e73 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 6 Apr 2023 10:48:46 -0400 Subject: [PATCH 1/2] - bubbles parameter naming and method naming up when replacing indexer by method Signed-off-by: Vincent Biret --- src/Kiota.Builder/CodeDOM/CodeClass.cs | 4 ++-- src/Kiota.Builder/CodeDOM/CodeMethod.cs | 8 +++++--- .../Refiners/CommonLanguageRefiner.cs | 15 ++++++++------- src/Kiota.Builder/Refiners/GoRefiner.cs | 3 ++- src/Kiota.Builder/Refiners/JavaRefiner.cs | 5 ++++- src/Kiota.Builder/Refiners/PhpRefiner.cs | 5 ++++- src/Kiota.Builder/Refiners/PythonRefiner.cs | 5 ++++- src/Kiota.Builder/Refiners/RubyRefiner.cs | 5 ++++- src/Kiota.Builder/Refiners/SwiftRefiner.cs | 3 ++- src/Kiota.Builder/Refiners/TypeScriptRefiner.cs | 5 ++++- .../Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs | 4 ++-- .../Writers/Go/CodeMethodWriterTests.cs | 2 +- 12 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/Kiota.Builder/CodeDOM/CodeClass.cs b/src/Kiota.Builder/CodeDOM/CodeClass.cs index 108e4a2319..6a32445d8f 100644 --- a/src/Kiota.Builder/CodeDOM/CodeClass.cs +++ b/src/Kiota.Builder/CodeDOM/CodeClass.cs @@ -53,9 +53,9 @@ public CodeIndexer? Indexer if (Indexer is CodeIndexer existingIndexer) { RemoveChildElement(existingIndexer); - AddRange(CodeMethod.FromIndexer(existingIndexer, $"By{existingIndexer.SerializationName.CleanupSymbolName().ToFirstCharacterUpperCase()}", true)); + AddRange(CodeMethod.FromIndexer(existingIndexer, static x => $"With{x.ToFirstCharacterUpperCase()}", static x => x.ToFirstCharacterUpperCase(), true)); } - AddRange(CodeMethod.FromIndexer(value, $"By{value.SerializationName.CleanupSymbolName().ToFirstCharacterUpperCase()}", false)); + AddRange(CodeMethod.FromIndexer(value, static x => $"With{x.ToFirstCharacterUpperCase()}", static x => x.ToFirstCharacterUpperCase(), false)); } else AddRange(value); diff --git a/src/Kiota.Builder/CodeDOM/CodeMethod.cs b/src/Kiota.Builder/CodeDOM/CodeMethod.cs index 7794d10af3..1a3aa3e0d4 100644 --- a/src/Kiota.Builder/CodeDOM/CodeMethod.cs +++ b/src/Kiota.Builder/CodeDOM/CodeMethod.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; +using Kiota.Builder.Extensions; namespace Kiota.Builder.CodeDOM; @@ -74,16 +75,17 @@ public object Clone() public class CodeMethod : CodeTerminalWithKind, ICloneable, IDocumentedElement { public static readonly CodeParameterKind ParameterKindForConvertedIndexers = CodeParameterKind.Custom; - public static CodeMethod FromIndexer(CodeIndexer originalIndexer, string? methodNameSuffix, bool parameterNullable) + public static CodeMethod FromIndexer(CodeIndexer originalIndexer, Func methodNameCallback, Func parameterNameCallback, bool parameterNullable) { ArgumentNullException.ThrowIfNull(originalIndexer); + var parameterSymbolName = originalIndexer.SerializationName.CleanupSymbolName(); var method = new CodeMethod { IsAsync = false, IsStatic = false, Access = AccessModifier.Public, Kind = CodeMethodKind.IndexerBackwardCompatibility, - Name = originalIndexer.PathSegment + methodNameSuffix, + Name = methodNameCallback(parameterSymbolName), Documentation = new() { Description = originalIndexer.Documentation.Description, @@ -95,7 +97,7 @@ public static CodeMethod FromIndexer(CodeIndexer originalIndexer, string? method method.ReturnType.IsNullable = false; var parameter = new CodeParameter { - Name = "id", + Name = parameterNameCallback(parameterSymbolName), Optional = false, Kind = ParameterKindForConvertedIndexers, Documentation = new() diff --git a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs index 69291d715d..3170e8e9e8 100644 --- a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs +++ b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs @@ -657,7 +657,7 @@ protected static void MoveClassesWithNamespaceNamesUnderNamespace(CodeElement cu } CrawlTree(currentElement, MoveClassesWithNamespaceNamesUnderNamespace); } - protected static void ReplaceIndexersByMethodsWithParameter(CodeElement currentElement, bool parameterNullable, string? methodNameSuffix = default) + protected static void ReplaceIndexersByMethodsWithParameter(CodeElement currentElement, bool parameterNullable, Func methodNameCallback, Func parameterNameCallback) { if (currentElement is CodeIndexer currentIndexer && currentElement.Parent is CodeClass indexerParentClass && @@ -666,14 +666,15 @@ indexerParentClass.Parent is CodeNamespace indexerNamespace && { indexerParentClass.RemoveChildElement(currentElement); AddIndexerMethod(indexerParentClass, - methodNameSuffix, + methodNameCallback, + parameterNameCallback, parameterNullable, currentIndexer, lookupNamespace); } - CrawlTree(currentElement, c => ReplaceIndexersByMethodsWithParameter(c, parameterNullable, methodNameSuffix)); + CrawlTree(currentElement, c => ReplaceIndexersByMethodsWithParameter(c, parameterNullable, methodNameCallback, parameterNameCallback)); } - private static void AddIndexerMethod(CodeClass indexerParentClass, string? methodNameSuffix, bool parameterNullable, CodeIndexer currentIndexer, CodeNamespace lookupNamespace) + private static void AddIndexerMethod(CodeClass indexerParentClass, Func methodNameCallback, Func parameterNameCallback, bool parameterNullable, CodeIndexer currentIndexer, CodeNamespace lookupNamespace) { if (lookupNamespace.Classes .Where(static x => x.IsOfKind(CodeClassKind.RequestBuilder)) @@ -685,7 +686,7 @@ x.Type is CodeType xType && .OfType() .FirstOrDefault() is CodeClass parentClassForProperty) { - parentClassForProperty.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameSuffix, parameterNullable)); + parentClassForProperty.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); } else if (lookupNamespace.Classes .Where(static x => x.IsOfKind(CodeClassKind.RequestBuilder)) @@ -697,7 +698,7 @@ x.ReturnType is CodeType xMethodType && .OfType() .FirstOrDefault() is CodeClass parentClassForMethod) { - parentClassForMethod.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameSuffix, parameterNullable)); + parentClassForMethod.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); } else if (lookupNamespace.GetImmediateParentOfType() is CodeNamespace parentNamespace && parentNamespace.Classes @@ -708,7 +709,7 @@ x.ReturnType is CodeType xMethodType && xMethodType.TypeDefinition == indexerParentClass) is not null) { - indexerParentClass.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameSuffix, parameterNullable)); //we already went one up with the previous indexer + indexerParentClass.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); //we already went one up with the previous indexer } } internal void DisableActionOf(CodeElement current, params CodeParameterKind[] kinds) diff --git a/src/Kiota.Builder/Refiners/GoRefiner.cs b/src/Kiota.Builder/Refiners/GoRefiner.cs index 3e32b01ed7..6ecf7ae6f5 100644 --- a/src/Kiota.Builder/Refiners/GoRefiner.cs +++ b/src/Kiota.Builder/Refiners/GoRefiner.cs @@ -32,7 +32,8 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance ReplaceIndexersByMethodsWithParameter( generatedCode, false, - "ById"); + static x => $"With{x.ToFirstCharacterUpperCase()}", + static x => x.ToFirstCharacterLowerCase()); FlattenNestedHierarchy(generatedCode); FlattenGoParamsFileNames(generatedCode); FlattenGoFileNames(generatedCode); diff --git a/src/Kiota.Builder/Refiners/JavaRefiner.cs b/src/Kiota.Builder/Refiners/JavaRefiner.cs index f62aa10dfc..f9ed38482f 100644 --- a/src/Kiota.Builder/Refiners/JavaRefiner.cs +++ b/src/Kiota.Builder/Refiners/JavaRefiner.cs @@ -51,7 +51,10 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance }); RemoveClassNamePrefixFromNestedClasses(generatedCode); InsertOverrideMethodForRequestExecutorsAndBuildersAndConstructors(generatedCode); - ReplaceIndexersByMethodsWithParameter(generatedCode, true); + ReplaceIndexersByMethodsWithParameter(generatedCode, + true, + static x => $"With{x.ToFirstCharacterUpperCase()}", + static x => x.ToFirstCharacterLowerCase()); cancellationToken.ThrowIfCancellationRequested(); RemoveCancellationParameter(generatedCode); ConvertUnionTypesToWrapper(generatedCode, diff --git a/src/Kiota.Builder/Refiners/PhpRefiner.cs b/src/Kiota.Builder/Refiners/PhpRefiner.cs index 9b8ae6d729..848ce9bc3c 100644 --- a/src/Kiota.Builder/Refiners/PhpRefiner.cs +++ b/src/Kiota.Builder/Refiners/PhpRefiner.cs @@ -37,7 +37,10 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance cancellationToken.ThrowIfCancellationRequested(); CorrectParameterType(generatedCode); MakeModelPropertiesNullable(generatedCode); - ReplaceIndexersByMethodsWithParameter(generatedCode, false, "ById"); + ReplaceIndexersByMethodsWithParameter(generatedCode, + false, + static x => $"With{x.ToFirstCharacterUpperCase()}", + static x => x.ToFirstCharacterLowerCase()); cancellationToken.ThrowIfCancellationRequested(); MoveClassesWithNamespaceNamesUnderNamespace(generatedCode); AddDiscriminatorMappingsUsingsToParentClasses( diff --git a/src/Kiota.Builder/Refiners/PythonRefiner.cs b/src/Kiota.Builder/Refiners/PythonRefiner.cs index 7a537f9972..15d08b139f 100644 --- a/src/Kiota.Builder/Refiners/PythonRefiner.cs +++ b/src/Kiota.Builder/Refiners/PythonRefiner.cs @@ -20,7 +20,10 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance DisableActionOf(generatedCode, CodeParameterKind.RequestConfiguration); cancellationToken.ThrowIfCancellationRequested(); - ReplaceIndexersByMethodsWithParameter(generatedCode, false, "_by_id"); + ReplaceIndexersByMethodsWithParameter(generatedCode, + false, + static x => $"_with_{x.ToSnakeCase()}", + static x => x.ToSnakeCase()); RemoveCancellationParameter(generatedCode); CorrectCoreType(generatedCode, CorrectMethodType, CorrectPropertyType, CorrectImplements); cancellationToken.ThrowIfCancellationRequested(); diff --git a/src/Kiota.Builder/Refiners/RubyRefiner.cs b/src/Kiota.Builder/Refiners/RubyRefiner.cs index c431e1e19b..72f9a8a198 100644 --- a/src/Kiota.Builder/Refiners/RubyRefiner.cs +++ b/src/Kiota.Builder/Refiners/RubyRefiner.cs @@ -17,7 +17,10 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance return Task.Run(() => { cancellationToken.ThrowIfCancellationRequested(); - ReplaceIndexersByMethodsWithParameter(generatedCode, false, "_by_id"); + ReplaceIndexersByMethodsWithParameter(generatedCode, + false, + static x => $"_with_{x.ToSnakeCase()}", + static x => x.ToSnakeCase()); MoveRequestBuilderPropertiesToBaseType(generatedCode, new CodeUsing { diff --git a/src/Kiota.Builder/Refiners/SwiftRefiner.cs b/src/Kiota.Builder/Refiners/SwiftRefiner.cs index 42ada1542e..26a2b3784e 100644 --- a/src/Kiota.Builder/Refiners/SwiftRefiner.cs +++ b/src/Kiota.Builder/Refiners/SwiftRefiner.cs @@ -21,7 +21,8 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance ReplaceIndexersByMethodsWithParameter( generatedCode, false, - "ById"); + static x => $"With{x.ToFirstCharacterUpperCase()}", + static x => x.ToFirstCharacterUpperCase()); cancellationToken.ThrowIfCancellationRequested(); ReplaceReservedNames( generatedCode, diff --git a/src/Kiota.Builder/Refiners/TypeScriptRefiner.cs b/src/Kiota.Builder/Refiners/TypeScriptRefiner.cs index 8675fef80e..4e5c95ca94 100644 --- a/src/Kiota.Builder/Refiners/TypeScriptRefiner.cs +++ b/src/Kiota.Builder/Refiners/TypeScriptRefiner.cs @@ -26,7 +26,10 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance IsExternal = true } }); - ReplaceIndexersByMethodsWithParameter(generatedCode, false, "ById"); + ReplaceIndexersByMethodsWithParameter(generatedCode, + false, + static x => $"with{x.ToFirstCharacterUpperCase()}", + static x => x.ToFirstCharacterLowerCase()); RemoveCancellationParameter(generatedCode); CorrectCoreType(generatedCode, CorrectMethodType, CorrectPropertyType, CorrectImplements); CorrectCoreTypesForBackingStore(generatedCode, "BackingStoreFactorySingleton.instance.createBackingStore()"); diff --git a/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs b/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs index 5e901434e3..939235d854 100644 --- a/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs +++ b/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs @@ -92,8 +92,8 @@ public void SetsIndexer() Assert.Empty(codeClass.GetChildElements(true).OfType()); var methods = codeClass.GetChildElements(true).OfType().Where(x => x.IsOfKind(CodeMethodKind.IndexerBackwardCompatibility)).ToArray(); Assert.Equal(2, methods.Length); - Assert.Equal("ByIdx_smth", methods.FirstOrDefault(x => x.OriginalIndexer.Name.Equals("idx")).Name); - Assert.Equal("ByIdx2", methods.FirstOrDefault(x => x.OriginalIndexer.Name.Equals("idx2")).Name); + Assert.Equal("WithIdx_smth", methods.FirstOrDefault(static x => x.OriginalIndexer.Name.Equals("idx")).Name); + Assert.Equal("WithIdx2", methods.FirstOrDefault(static x => x.OriginalIndexer.Name.Equals("idx2")).Name); } [Fact] public void ThrowsOnAddingEmptyCollections() diff --git a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs index b586e24e5d..32038275b3 100644 --- a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs @@ -1531,7 +1531,7 @@ public void WritesIndexer() }; if (parentClass.Indexer is null) throw new InvalidOperationException("Indexer is null"); - var methodForTest = parentClass.AddMethod(CodeMethod.FromIndexer(parentClass.Indexer, string.Empty, false)).First(); + var methodForTest = parentClass.AddMethod(CodeMethod.FromIndexer(parentClass.Indexer, static x => $"With{x.ToFirstCharacterUpperCase()}", static x => x.ToFirstCharacterLowerCase(), false)).First(); writer.Write(methodForTest); var result = tw.ToString(); Assert.Contains("m.BaseRequestBuilder.RequestAdapter", result); From 6adea87c5d0ee691e224a34c526f1033c45c152e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 6 Apr 2023 11:31:53 -0400 Subject: [PATCH 2/2] - keeps indexer backward method in their own classes and not in the parent Signed-off-by: Vincent Biret --- src/Kiota.Builder/CodeDOM/CodeIndexer.cs | 7 +++ src/Kiota.Builder/CodeDOM/CodeMethod.cs | 5 +- src/Kiota.Builder/KiotaBuilder.cs | 1 + .../Refiners/CommonLanguageRefiner.cs | 49 +------------------ .../Writers/Java/CodeMethodWriter.cs | 2 +- .../Writers/Php/CodeMethodWriter.cs | 2 +- .../Writers/Python/CodeMethodWriter.cs | 2 +- .../Writers/Ruby/CodeMethodWriter.cs | 2 +- .../Writers/TypeScript/CodeMethodWriter.cs | 2 +- .../CodeDOM/CodeClassTests.cs | 4 +- .../CodeDOM/CodeElementComparerPythonTests.cs | 3 +- .../CodeDOM/CodeElementComparerTests.cs | 6 ++- .../CodeDOM/CodeIndexerTests.cs | 3 +- .../Refiners/CSharpLanguageRefinerTests.cs | 6 ++- .../Refiners/JavaLanguageRefinerTests.cs | 3 +- .../Refiners/ShellRefinerTests.cs | 1 + .../Writers/CSharp/CodeIndexerWriterTests.cs | 3 +- .../Writers/Go/CodeMethodWriterTests.cs | 1 + .../Writers/Java/CodeMethodWriterTests.cs | 3 +- .../Writers/Php/CodeMethodWriterTests.cs | 3 +- .../Writers/Python/CodeMethodWriterTests.cs | 3 +- .../Writers/Ruby/CodeMethodWriterTests.cs | 3 +- .../Shell/ShellCodeMethodWriterTests.cs | 18 ++++--- .../TypeScript/CodeMethodWriterTests.cs | 3 +- 24 files changed, 60 insertions(+), 75 deletions(-) diff --git a/src/Kiota.Builder/CodeDOM/CodeIndexer.cs b/src/Kiota.Builder/CodeDOM/CodeIndexer.cs index 5f9ef8fee7..c5ba61d791 100644 --- a/src/Kiota.Builder/CodeDOM/CodeIndexer.cs +++ b/src/Kiota.Builder/CodeDOM/CodeIndexer.cs @@ -27,6 +27,13 @@ public required CodeTypeBase ReturnType returnType = value; } } + /// + /// The name of the parameter to use for the indexer. + /// + public required string IndexParameterName + { + get; set; + } public string SerializationName { get; set; } = string.Empty; public CodeDocumentation Documentation { get; set; } = new(); /// diff --git a/src/Kiota.Builder/CodeDOM/CodeMethod.cs b/src/Kiota.Builder/CodeDOM/CodeMethod.cs index 1a3aa3e0d4..ce08672a2d 100644 --- a/src/Kiota.Builder/CodeDOM/CodeMethod.cs +++ b/src/Kiota.Builder/CodeDOM/CodeMethod.cs @@ -78,14 +78,13 @@ public class CodeMethod : CodeTerminalWithKind, ICloneable, IDoc public static CodeMethod FromIndexer(CodeIndexer originalIndexer, Func methodNameCallback, Func parameterNameCallback, bool parameterNullable) { ArgumentNullException.ThrowIfNull(originalIndexer); - var parameterSymbolName = originalIndexer.SerializationName.CleanupSymbolName(); var method = new CodeMethod { IsAsync = false, IsStatic = false, Access = AccessModifier.Public, Kind = CodeMethodKind.IndexerBackwardCompatibility, - Name = methodNameCallback(parameterSymbolName), + Name = methodNameCallback(originalIndexer.IndexParameterName), Documentation = new() { Description = originalIndexer.Documentation.Description, @@ -97,7 +96,7 @@ public static CodeMethod FromIndexer(CodeIndexer originalIndexer, Func methodNameCallback, Func parameterNameCallback) { if (currentElement is CodeIndexer currentIndexer && - currentElement.Parent is CodeClass indexerParentClass && - indexerParentClass.Parent is CodeNamespace indexerNamespace && - indexerNamespace.Parent is CodeNamespace lookupNamespace) + currentElement.Parent is CodeClass indexerParentClass) { indexerParentClass.RemoveChildElement(currentElement); - AddIndexerMethod(indexerParentClass, - methodNameCallback, - parameterNameCallback, - parameterNullable, - currentIndexer, - lookupNamespace); + indexerParentClass.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); } CrawlTree(currentElement, c => ReplaceIndexersByMethodsWithParameter(c, parameterNullable, methodNameCallback, parameterNameCallback)); } - private static void AddIndexerMethod(CodeClass indexerParentClass, Func methodNameCallback, Func parameterNameCallback, bool parameterNullable, CodeIndexer currentIndexer, CodeNamespace lookupNamespace) - { - if (lookupNamespace.Classes - .Where(static x => x.IsOfKind(CodeClassKind.RequestBuilder)) - .SelectMany(static x => x.Properties) - .Where(x => x.IsOfKind(CodePropertyKind.RequestBuilder) && - x.Type is CodeType xType && - xType.TypeDefinition == indexerParentClass) - .Select(static x => x.Parent) - .OfType() - .FirstOrDefault() is CodeClass parentClassForProperty) - { - parentClassForProperty.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); - } - else if (lookupNamespace.Classes - .Where(static x => x.IsOfKind(CodeClassKind.RequestBuilder)) - .SelectMany(static x => x.Methods) - .Where(x => x.IsOfKind(CodeMethodKind.RequestBuilderWithParameters, CodeMethodKind.RequestBuilderBackwardCompatibility) && - x.ReturnType is CodeType xMethodType && - xMethodType.TypeDefinition == indexerParentClass) - .Select(static x => x.Parent) - .OfType() - .FirstOrDefault() is CodeClass parentClassForMethod) - { - parentClassForMethod.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); - } - else if (lookupNamespace.GetImmediateParentOfType() is CodeNamespace parentNamespace && - parentNamespace.Classes - .Where(static x => x.IsOfKind(CodeClassKind.RequestBuilder)) - .SelectMany(static x => x.Methods) - .FirstOrDefault(x => x.IsOfKind(CodeMethodKind.IndexerBackwardCompatibility) && - x.ReturnType is CodeType xMethodType && - xMethodType.TypeDefinition == indexerParentClass) - is not null) - { - indexerParentClass.AddMethod(CodeMethod.FromIndexer(currentIndexer, methodNameCallback, parameterNameCallback, parameterNullable)); //we already went one up with the previous indexer - } - } internal void DisableActionOf(CodeElement current, params CodeParameterKind[] kinds) { if (current is CodeMethod currentMethod) diff --git a/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs index a73303f074..37645ea31b 100644 --- a/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs @@ -377,7 +377,7 @@ private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, Lan { if (parentClass.GetPropertyOfKind(CodePropertyKind.PathParameters) is CodeProperty pathParametersProperty && codeElement.OriginalIndexer != null) conventions.AddParametersAssignment(writer, pathParametersProperty.Type, $"this.{pathParametersProperty.Name}", - parameters: (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, "id")); + parameters: (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, codeElement.OriginalIndexer.IndexParameterName.ToFirstCharacterLowerCase())); conventions.AddRequestBuilderBody(parentClass, returnType, writer, conventions.TempDictionaryVarName); } private void WriteDeserializerBody(CodeMethod codeElement, CodeClass parentClass, LanguageWriter writer, bool inherits) diff --git a/src/Kiota.Builder/Writers/Php/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Php/CodeMethodWriter.cs index ed6ca86329..645024c13c 100644 --- a/src/Kiota.Builder/Writers/Php/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Php/CodeMethodWriter.cs @@ -583,7 +583,7 @@ private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, str if (parentClass.GetPropertyOfKind(CodePropertyKind.PathParameters) is CodeProperty pathParametersProperty && codeElement.OriginalIndexer != null) conventions.AddParametersAssignment(writer, pathParametersProperty.Type, $"$this->{pathParametersProperty.Name}", - (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, "$id")); + (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, $"${codeElement.OriginalIndexer.IndexParameterName.ToFirstCharacterLowerCase()}")); conventions.AddRequestBuilderBody(parentClass, returnType, writer, conventions.TempDictionaryVarName, pathParameters); } diff --git a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs index 1177f89fd8..0d3be1250b 100644 --- a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs @@ -117,7 +117,7 @@ private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, str if (parentClass.GetPropertyOfKind(CodePropertyKind.PathParameters) is CodeProperty pathParametersProperty && codeElement.OriginalIndexer != null) conventions.AddParametersAssignment(writer, pathParametersProperty.Type, $"self.{pathParametersProperty.Name}", - (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, "id")); + (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, codeElement.OriginalIndexer.IndexParameterName.ToSnakeCase())); conventions.AddRequestBuilderBody(parentClass, returnType, writer, conventions.TempDictionaryVarName); } private void WriteRequestBuilderWithParametersBody(CodeMethod codeElement, CodeClass parentClass, string returnType, LanguageWriter writer) diff --git a/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs index 7e9409ed36..634814883d 100644 --- a/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs @@ -200,7 +200,7 @@ private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, Lan if (parentClass.GetPropertyOfKind(CodePropertyKind.PathParameters) is CodeProperty pathParametersProperty && codeElement.OriginalIndexer != null) writer.WriteLines($"{conventions.TempDictionaryVarName} = @{pathParametersProperty.NamePrefix}{pathParametersProperty.Name.ToSnakeCase()}.clone", - $"{conventions.TempDictionaryVarName}[\"{codeElement.OriginalIndexer.SerializationName}\"] = id"); + $"{conventions.TempDictionaryVarName}[\"{codeElement.OriginalIndexer.SerializationName}\"] = {codeElement.OriginalIndexer.IndexParameterName.ToSnakeCase()}"); conventions.AddRequestBuilderBody(parentClass, returnType, writer, conventions.TempDictionaryVarName, $"return {prefix}"); } private void WriteDeserializerBody(CodeClass parentClass, LanguageWriter writer) diff --git a/src/Kiota.Builder/Writers/TypeScript/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/TypeScript/CodeMethodWriter.cs index 8b9a3a4815..95d4955055 100644 --- a/src/Kiota.Builder/Writers/TypeScript/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/TypeScript/CodeMethodWriter.cs @@ -119,7 +119,7 @@ private void WriteIndexerBody(CodeMethod codeElement, CodeClass parentClass, str codeElement.OriginalIndexer != null) { localConventions.AddParametersAssignment(writer, pathParametersProperty.Type, $"this.{pathParametersProperty.Name}", - parameters: (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, "id")); + parameters: (codeElement.OriginalIndexer.IndexType, codeElement.OriginalIndexer.SerializationName, codeElement.OriginalIndexer.IndexParameterName.ToFirstCharacterLowerCase())); } conventions.AddRequestBuilderBody(parentClass, returnType, writer, conventions.TempDictionaryVarName); } diff --git a/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs b/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs index 939235d854..3d4b9431a7 100644 --- a/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs +++ b/tests/Kiota.Builder.Tests/CodeDOM/CodeClassTests.cs @@ -66,6 +66,7 @@ public void SetsIndexer() IsExternal = true, IsNullable = true, }, + IndexParameterName = "idxSmth", }; Assert.Single(codeClass.GetChildElements(true).OfType()); Assert.Throws(() => @@ -88,11 +89,12 @@ public void SetsIndexer() IsExternal = true, IsNullable = true, }, + IndexParameterName = "idx2", }; Assert.Empty(codeClass.GetChildElements(true).OfType()); var methods = codeClass.GetChildElements(true).OfType().Where(x => x.IsOfKind(CodeMethodKind.IndexerBackwardCompatibility)).ToArray(); Assert.Equal(2, methods.Length); - Assert.Equal("WithIdx_smth", methods.FirstOrDefault(static x => x.OriginalIndexer.Name.Equals("idx")).Name); + Assert.Equal("WithIdxSmth", methods.FirstOrDefault(static x => x.OriginalIndexer.Name.Equals("idx")).Name); Assert.Equal("WithIdx2", methods.FirstOrDefault(static x => x.OriginalIndexer.Name.Equals("idx2")).Name); } [Fact] diff --git a/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerPythonTests.cs b/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerPythonTests.cs index c09496381e..2410c00761 100644 --- a/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerPythonTests.cs +++ b/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerPythonTests.cs @@ -51,7 +51,8 @@ public void OrdersWithMethodWithinClass() }, IndexType = new CodeType { Name = "string" - } + }, + IndexParameterName = "param" }, new CodeProperty() { Name = "prop", Type = new CodeType { diff --git a/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerTests.cs b/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerTests.cs index 5278c83f4e..ca1da92639 100644 --- a/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerTests.cs +++ b/tests/Kiota.Builder.Tests/CodeDOM/CodeElementComparerTests.cs @@ -51,7 +51,8 @@ public void OrdersWithMethodWithinClass() }, IndexType = new CodeType { Name = "string" - } + }, + IndexParameterName = "param" }, new CodeProperty() { Name = "prop", Type = new CodeType { @@ -115,7 +116,8 @@ public void OrdersWithMethodsOutsideOfClass() }, IndexType = new CodeType { Name = "string" - } + }, + IndexParameterName = "param" }, new CodeProperty() { Name = "prop", Type = new CodeType { diff --git a/tests/Kiota.Builder.Tests/CodeDOM/CodeIndexerTests.cs b/tests/Kiota.Builder.Tests/CodeDOM/CodeIndexerTests.cs index b2e715d65c..351073ba61 100644 --- a/tests/Kiota.Builder.Tests/CodeDOM/CodeIndexerTests.cs +++ b/tests/Kiota.Builder.Tests/CodeDOM/CodeIndexerTests.cs @@ -15,7 +15,8 @@ public void IndexerInits() Description = "some description", }, IndexType = new CodeType(), - ReturnType = new CodeType() + ReturnType = new CodeType(), + IndexParameterName = "param", }; } } diff --git a/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs b/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs index bc9f0f1ca2..a0bf146eee 100644 --- a/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs +++ b/tests/Kiota.Builder.Tests/Refiners/CSharpLanguageRefinerTests.cs @@ -227,7 +227,8 @@ public async Task EscapesReservedKeywordsForReservedNamespaceNameSegments() { Name = "string", }, - ReturnType = indexerCodeType + ReturnType = indexerCodeType, + IndexParameterName = "id", }; requestBuilder.Indexer = indexer; @@ -296,7 +297,8 @@ public async Task ConvertsUnionTypesToWrapper() IndexType = new CodeType { Name = "string" - } + }, + IndexParameterName = "id", }; model.Indexer = indexer; method.AddParameter(parameter); diff --git a/tests/Kiota.Builder.Tests/Refiners/JavaLanguageRefinerTests.cs b/tests/Kiota.Builder.Tests/Refiners/JavaLanguageRefinerTests.cs index 76c5a958f5..c4b98b93a1 100644 --- a/tests/Kiota.Builder.Tests/Refiners/JavaLanguageRefinerTests.cs +++ b/tests/Kiota.Builder.Tests/Refiners/JavaLanguageRefinerTests.cs @@ -339,6 +339,7 @@ public async Task ReplacesIndexersByMethodsWithParameter() { Name = "string", }, + IndexParameterName = "id", }; var collectionRequestBuilder = collectionNS.AddClass(new CodeClass { @@ -358,7 +359,7 @@ public async Task ReplacesIndexersByMethodsWithParameter() await ILanguageRefiner.Refine(new GenerationConfiguration { Language = GenerationLanguage.Java }, root); Assert.Single(requestBuilder.Properties); Assert.Empty(requestBuilder.GetChildElements(true).OfType()); - Assert.Single(collectionRequestBuilder.Methods.Where(static x => x.IsOfKind(CodeMethodKind.IndexerBackwardCompatibility))); + Assert.Single(requestBuilder.Methods.Where(static x => x.IsOfKind(CodeMethodKind.IndexerBackwardCompatibility))); Assert.Single(collectionRequestBuilder.Properties); } [Fact] diff --git a/tests/Kiota.Builder.Tests/Refiners/ShellRefinerTests.cs b/tests/Kiota.Builder.Tests/Refiners/ShellRefinerTests.cs index f5b4119cc3..a58faa266e 100644 --- a/tests/Kiota.Builder.Tests/Refiners/ShellRefinerTests.cs +++ b/tests/Kiota.Builder.Tests/Refiners/ShellRefinerTests.cs @@ -71,6 +71,7 @@ public async Task CreatesCommandBuilders() { Name = "string" }, + IndexParameterName = "id", }; // Add request executor diff --git a/tests/Kiota.Builder.Tests/Writers/CSharp/CodeIndexerWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/CSharp/CodeIndexerWriterTests.cs index 7b3a293a66..e21d7e6f47 100644 --- a/tests/Kiota.Builder.Tests/Writers/CSharp/CodeIndexerWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/CSharp/CodeIndexerWriterTests.cs @@ -37,7 +37,8 @@ public CodeIndexerWriterTests() ReturnType = new CodeType { Name = "SomeRequestBuilder" - } + }, + IndexParameterName = "position" }; parentClass.Indexer = indexer; parentClass.AddProperty(new() diff --git a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs index 32038275b3..eef9d5c8cf 100644 --- a/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Go/CodeMethodWriterTests.cs @@ -1528,6 +1528,7 @@ public void WritesIndexer() { Name = "Somecustomtype", }, + IndexParameterName = "id", }; if (parentClass.Indexer is null) throw new InvalidOperationException("Indexer is null"); diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeMethodWriterTests.cs index a1ecb210e1..49e3352b0b 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeMethodWriterTests.cs @@ -1554,7 +1554,8 @@ public void WritesIndexer() ReturnType = new CodeType { Name = "string" - } + }, + IndexParameterName = "id" }; writer.Write(method); var result = tw.ToString(); diff --git a/tests/Kiota.Builder.Tests/Writers/Php/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Php/CodeMethodWriterTests.cs index 97f7078b6d..8f4bf88a95 100644 --- a/tests/Kiota.Builder.Tests/Writers/Php/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Php/CodeMethodWriterTests.cs @@ -619,7 +619,8 @@ public async Task WriteIndexerBody() ReturnType = new CodeType { Name = "MessageRequestBuilder" - } + }, + IndexParameterName = "id", }, OriginalMethod = new CodeMethod { diff --git a/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs index 1c725c1e92..1798b3b85e 100644 --- a/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs @@ -869,7 +869,8 @@ public void WritesIndexer() ReturnType = new CodeType { Name = "string", - } + }, + IndexParameterName = "id", }; writer.Write(method); diff --git a/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs index cf89ce9d6d..865ba664ac 100644 --- a/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs @@ -696,7 +696,8 @@ public void WritesIndexer() ReturnType = new CodeType { Name = "string", - } + }, + IndexParameterName = "id", }; writer.Write(method); var result = tw.ToString(); diff --git a/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs index 4bc1134d89..342730c552 100644 --- a/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs @@ -234,7 +234,9 @@ public void WritesIndexerCommands() IndexType = new CodeType { Name = "string", - } + }, + SerializationName = "test", + IndexParameterName = "id", }; AddRequestProperties(); @@ -278,7 +280,8 @@ public void WritesMatchingIndexerCommandsIntoExecutableCommand() codeClass.AddMethod(generatorMethod); var type = new CodeClass { Name = "TestItemRequestBuilder", Kind = CodeClassKind.RequestBuilder }; - var tupleReturn = new CodeType { + var tupleReturn = new CodeType + { Name = "Tuple", IsExternal = true, GenericTypeParameterValues = new List { @@ -312,7 +315,8 @@ public void WritesMatchingIndexerCommandsIntoExecutableCommand() IndexType = new CodeType { Name = "string", - } + }, + IndexParameterName = "id", } }; @@ -365,8 +369,9 @@ public void WritesMatchingIndexerCommandsIntoContainerCommand() navTd.AddMethod(new CodeMethod { Kind = CodeMethodKind.CommandBuilder, Name = "BuildTestMethod11", SimpleName = "Test", ReturnType = new CodeType() }); var type = new CodeClass { Name = "TestIndexItemRequestBuilder", Kind = CodeClassKind.RequestBuilder }; - - var tupleReturn = new CodeType { + + var tupleReturn = new CodeType + { Name = "Tuple", IsExternal = true, GenericTypeParameterValues = new List { @@ -400,7 +405,8 @@ public void WritesMatchingIndexerCommandsIntoContainerCommand() IndexType = new CodeType { Name = "string", - } + }, + IndexParameterName = "id", } }; diff --git a/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeMethodWriterTests.cs index 86111f056b..778fd2de54 100644 --- a/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeMethodWriterTests.cs @@ -609,7 +609,8 @@ public void WritesIndexer() ReturnType = new CodeType { Name = "string", - } + }, + IndexParameterName = "id", }; writer.Write(method); var result = tw.ToString();