diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c91224409..8e4b98bdcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Revamped the api surface for request configuration. [#1494](https://github.com/microsoft/kiota/issues/1494) - Fixed a bug in methods naming in Go after request configuration revamp. - Fixes a bug where reserved names would not be updated for inheritance. +- Add `item` subcommand for indexers. Fixes conflicts when paths have repeating segments. (Shell) [#1541](https://github.com/microsoft/kiota/issues/1541) ## [0.0.23] - 2022-04-19 diff --git a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs index 1fe9ea86c8..694944446f 100644 --- a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs +++ b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs @@ -468,7 +468,7 @@ internal void DisableActionOf(CodeElement current, params CodeParameterKind[] ki CrawlTree(current, x => DisableActionOf(x, kinds)); } - internal void AddInnerClasses(CodeElement current, bool prefixClassNameWithParentName, string queryParametersBaseClassName = "QueryParametersBase", bool addToParentNamespace = false) { + internal void AddInnerClasses(CodeElement current, bool prefixClassNameWithParentName, string queryParametersBaseClassName = "", bool addToParentNamespace = false) { if(current is CodeClass currentClass) { var parentNamespace = currentClass.GetImmediateParentOfType(); var innerClasses = currentClass diff --git a/src/Kiota.Builder/Refiners/ShellRefiner.cs b/src/Kiota.Builder/Refiners/ShellRefiner.cs index 3b773a4877..f84df0b191 100644 --- a/src/Kiota.Builder/Refiners/ShellRefiner.cs +++ b/src/Kiota.Builder/Refiners/ShellRefiner.cs @@ -118,7 +118,6 @@ private static void CreateCommandBuildersFromIndexers(CodeClass currentClass, IE // ReturnType setter assigns the parent method.ReturnType = CreateCommandType(); - method.ReturnType.CollectionKind = CodeTypeBase.CodeTypeCollectionKind.Complex; currentClass.AddMethod(method); currentClass.RemoveChildElement(indexer); } diff --git a/src/Kiota.Builder/Writers/Shell/ShellCodeMethodWriter.cs b/src/Kiota.Builder/Writers/Shell/ShellCodeMethodWriter.cs index 382bc03099..cd7966dd0a 100644 --- a/src/Kiota.Builder/Writers/Shell/ShellCodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Shell/ShellCodeMethodWriter.cs @@ -350,26 +350,29 @@ private void WriteUnnamedBuildCommand(CodeMethod codeElement, LanguageWriter wri } else if (codeElement.OriginalIndexer != null) { + writer.WriteLine($"var command = new Command(\"item\");"); var targetClass = conventions.GetTypeString(codeElement.OriginalIndexer.ReturnType, codeElement); var builderMethods = (codeElement.OriginalIndexer.ReturnType as CodeType).TypeDefinition.GetChildElements(true).OfType() .Where(m => m.IsOfKind(CodeMethodKind.CommandBuilder)) .OrderBy(m => m.Name); conventions.AddRequestBuilderBody(parent, targetClass, writer, prefix: "var builder = ", pathParameters: codeElement.Parameters.Where(x => x.IsOfKind(CodeParameterKind.Path))); - writer.WriteLine("var commands = new List();"); foreach (var method in builderMethods) { if (method.ReturnType.IsCollection) { - writer.WriteLine($"commands.AddRange(builder.{method.Name}());"); + writer.WriteLine($"foreach (var cmd in builder.{method.Name}()) {{"); + writer.IncreaseIndent(); + writer.WriteLine($"command.AddCommand(cmd);"); + writer.CloseBlock(); } else { - writer.WriteLine($"commands.Add(builder.{method.Name}());"); + writer.WriteLine($"command.AddCommand(builder.{method.Name}());"); } } - writer.WriteLine("return commands;"); + writer.WriteLine("return command;"); } } @@ -452,7 +455,7 @@ private static void WriteRequestInformation(LanguageWriter writer, CodeMethod ge indentParam = false; } - writer.Write($"q.{param.Name.ToFirstCharacterUpperCase()} = {paramName};", indentParam); + writer.Write($"q.QueryParameters.{param.Name.ToFirstCharacterUpperCase()} = {paramName};", indentParam); writer.WriteLine(); } diff --git a/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs index 498c25efb0..dcba598a22 100644 --- a/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Shell/ShellCodeMethodWriterTests.cs @@ -187,10 +187,11 @@ public void WritesIndexerCommands() { var result = tw.ToString(); Assert.Contains("var builder = new TestRequestBuilder", result); - Assert.Contains("var commands = new List();", result); - Assert.Contains("commands.Add(builder.BuildTestMethod1());", result); - Assert.Contains("commands.AddRange(builder.BuildTestMethod2());", result); - Assert.Contains("return commands;", result); + Assert.Contains("var command = new Command(\"item\");", result); + Assert.Contains("command.AddCommand(builder.BuildTestMethod1());", result); + Assert.Contains("foreach (var cmd in builder.BuildTestMethod2()) {", result); + Assert.Contains("command.AddCommand(cmd);", result); + Assert.Contains("return command;", result); } [Fact]