From 5b24395c7f4047ec3c8f56e850a210ca0f5cb296 Mon Sep 17 00:00:00 2001 From: ramsessanchez <63934382+ramsessanchez@users.noreply.github.com> Date: Thu, 17 Aug 2023 13:31:48 -0700 Subject: [PATCH 1/5] CompletableFuture still needs annotation --- src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs index 7ba2baf74d..559e0d80a9 100644 --- a/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeMethodWriter.cs @@ -687,7 +687,7 @@ private void WriteMethodDocumentation(CodeMethod code, LanguageWriter writer, st .OrderBy(static x => x.Name, StringComparer.OrdinalIgnoreCase) .Select(x => $"@param {x.Name} {JavaConventionService.RemoveInvalidDescriptionCharacters(x.Documentation.Description)}") .Union(new[] { returnRemark })); - if (!returnVoid) //Nullable/Nonnull annotations for returns are a part of Method Documentation + if (!returnVoid || code.IsAsync) //Nullable/Nonnull annotations for returns are a part of Method Documentation writer.WriteLine(code.ReturnType.IsNullable && !code.IsAsync ? "@jakarta.annotation.Nullable" : "@jakarta.annotation.Nonnull"); } private string GetDeserializationMethodName(CodeTypeBase propType, CodeMethod method) From a9b8542a6b19c8d1e5ac5823babfa4ad848008ab Mon Sep 17 00:00:00 2001 From: ramsessanchez <63934382+ramsessanchez@users.noreply.github.com> Date: Thu, 17 Aug 2023 15:46:18 -0700 Subject: [PATCH 2/5] Adds @Generated annotation to classes and enums --- .../Writers/Java/CodeClassDeclarationWriter.cs | 2 ++ src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs | 2 ++ .../Writers/Java/CodeClassDeclarationWriterTests.cs | 8 ++++++++ .../Writers/Java/CodeEnumWriterTests.cs | 8 ++++++++ 4 files changed, 20 insertions(+) diff --git a/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs b/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs index 0d176394a4..2cda25acce 100644 --- a/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs @@ -7,6 +7,7 @@ namespace Kiota.Builder.Writers.Java; public class CodeClassDeclarationWriter : BaseElementWriter { + public static string AutoGenerationHeader => "@Generated(\"com.microsoft.kiota\")"; public CodeClassDeclarationWriter(JavaConventionService conventionService) : base(conventionService) { } public override void WriteCodeElement(ClassDeclaration codeElement, LanguageWriter writer) { @@ -35,6 +36,7 @@ public override void WriteCodeElement(ClassDeclaration codeElement, LanguageWrit if (codeElement.Parent is CodeClass parentClass) conventions.WriteLongDescription(parentClass, writer); var innerClassStatic = codeElement.Parent is CodeClass currentClass && currentClass.IsOfKind(CodeClassKind.Model) && currentClass.Parent is CodeClass ? "static " : string.Empty; //https://stackoverflow.com/questions/47541459/no-enclosing-instance-is-accessible-must-qualify-the-allocation-with-an-enclosi + writer.WriteLine($"{AutoGenerationHeader}"); writer.WriteLine($"public {innerClassStatic}class {codeElement.Name.ToFirstCharacterUpperCase()}{derivation} {{"); writer.IncreaseIndent(); } diff --git a/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs b/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs index 7994d9e8c5..6cfec0fd60 100644 --- a/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs @@ -6,6 +6,7 @@ namespace Kiota.Builder.Writers.Java; public class CodeEnumWriter : BaseElementWriter { + public static string AutoGenerationHeader => "@Generated(\"com.microsoft.kiota\")"; public CodeEnumWriter(JavaConventionService conventionService) : base(conventionService) { } public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter writer) { @@ -22,6 +23,7 @@ public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter write string.Empty); conventions.WriteLongDescription(codeElement, writer); conventions.WriteDeprecatedAnnotation(codeElement, writer); + writer.WriteLine($"{AutoGenerationHeader}"); writer.WriteLine($"public enum {enumName} implements ValuedEnum {{"); writer.IncreaseIndent(); var lastEnumOption = enumOptions.Last(); diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs index 945c623b92..93f3274b8c 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs @@ -10,6 +10,7 @@ namespace Kiota.Builder.Tests.Writers.Java; public class CodeClassDeclarationWriterTests : IDisposable { + private const string AutoGenerationHeader = "@Generated(\"com.microsoft.kiota\")"; private const string DefaultPath = "./"; private const string DefaultName = "name"; private readonly StringWriter tw; @@ -43,6 +44,13 @@ public void WritesSimpleDeclaration() Assert.Contains("public class", result); } [Fact] + public void WritesAutoGeneratedHeader() + { + codeElementWriter.WriteCodeElement(parentClass.StartBlock, writer); + var result = tw.ToString(); + Assert.Contains(AutoGenerationHeader, result); + } + [Fact] public void WritesImplementation() { var declaration = parentClass.StartBlock; diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs index 4929bd444e..ac3af8719e 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs @@ -10,6 +10,7 @@ namespace Kiota.Builder.Tests.Writers.Java; public class CodeEnumWriterTests : IDisposable { + private const string AutoGenerationHeader = "@Generated(\"com.microsoft.kiota\")"; private const string DefaultPath = "./"; private const string DefaultName = "name"; private readonly StringWriter tw; @@ -53,6 +54,13 @@ public void WritesEnum() Assert.Contains(optionName, result); } [Fact] + public void WritesAutoGeneratedHeader() + { + writer.Write(currentEnum); + var result = tw.ToString(); + Assert.Contains(AutoGenerationHeader, result); + } + [Fact] public void DoesntWriteAnythingOnNoOption() { writer.Write(currentEnum); From 31ef5c718cb010786cbfcec92109fa3953f472d3 Mon Sep 17 00:00:00 2001 From: ramsessanchez <63934382+ramsessanchez@users.noreply.github.com> Date: Thu, 17 Aug 2023 15:57:11 -0700 Subject: [PATCH 3/5] edit AutoGeneratedHeader to enums test --- .../Writers/Java/CodeEnumWriterTests.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs index ac3af8719e..68d48e84f7 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs @@ -50,17 +50,11 @@ public void WritesEnum() Assert.Contains("@jakarta.annotation.Nullable", result); Assert.Contains("forValue(@jakarta.annotation.Nonnull final String searchValue)", result); Assert.Contains("default: return null;", result); + Assert.Contains(AutoGenerationHeader, result); AssertExtensions.CurlyBracesAreClosed(result); Assert.Contains(optionName, result); } [Fact] - public void WritesAutoGeneratedHeader() - { - writer.Write(currentEnum); - var result = tw.ToString(); - Assert.Contains(AutoGenerationHeader, result); - } - [Fact] public void DoesntWriteAnythingOnNoOption() { writer.Write(currentEnum); From 8a96cfae943c9273118baebae7d4fe9caf355a0d Mon Sep 17 00:00:00 2001 From: ramsessanchez <63934382+ramsessanchez@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:06:41 -0700 Subject: [PATCH 4/5] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b964f6bca2..d27712b3a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replace Javax annotations in favor of Jakarta annotations for Java code generation. [#2810](https://github.com/microsoft/kiota/issues/2810) - RequestExecuters call overload methods reducing code generation size for Java. [#3150](https://github.com/microsoft/kiota/issues/3150) - Remove URISyntaxException from Java generated RequestExecutors and RequestGenerators. [#3149](https://github.com/microsoft/kiota/issues/3149) +- Adds 'Generated' annotation to generated Enums and Classes for Java. [#3106](https://github.com/microsoft/kiota/issues/3106) ## [1.5.1] - 2023-08-08 From f389a7ab527197b47282d49e3cda5b6b84fa26b4 Mon Sep 17 00:00:00 2001 From: ramsessanchez <63934382+ramsessanchez@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:35:18 -0700 Subject: [PATCH 5/5] Refactor generation header --- src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs | 3 +-- src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs | 3 +-- src/Kiota.Builder/Writers/Java/JavaConventionService.cs | 1 + .../Writers/Java/CodeClassDeclarationWriterTests.cs | 3 +-- tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs | 4 ++-- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs b/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs index 2cda25acce..e7c0e7e8b3 100644 --- a/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeClassDeclarationWriter.cs @@ -7,7 +7,6 @@ namespace Kiota.Builder.Writers.Java; public class CodeClassDeclarationWriter : BaseElementWriter { - public static string AutoGenerationHeader => "@Generated(\"com.microsoft.kiota\")"; public CodeClassDeclarationWriter(JavaConventionService conventionService) : base(conventionService) { } public override void WriteCodeElement(ClassDeclaration codeElement, LanguageWriter writer) { @@ -36,7 +35,7 @@ public override void WriteCodeElement(ClassDeclaration codeElement, LanguageWrit if (codeElement.Parent is CodeClass parentClass) conventions.WriteLongDescription(parentClass, writer); var innerClassStatic = codeElement.Parent is CodeClass currentClass && currentClass.IsOfKind(CodeClassKind.Model) && currentClass.Parent is CodeClass ? "static " : string.Empty; //https://stackoverflow.com/questions/47541459/no-enclosing-instance-is-accessible-must-qualify-the-allocation-with-an-enclosi - writer.WriteLine($"{AutoGenerationHeader}"); + writer.WriteLine(JavaConventionService.AutoGenerationHeader); writer.WriteLine($"public {innerClassStatic}class {codeElement.Name.ToFirstCharacterUpperCase()}{derivation} {{"); writer.IncreaseIndent(); } diff --git a/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs b/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs index 6cfec0fd60..410e416a88 100644 --- a/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs +++ b/src/Kiota.Builder/Writers/Java/CodeEnumWriter.cs @@ -6,7 +6,6 @@ namespace Kiota.Builder.Writers.Java; public class CodeEnumWriter : BaseElementWriter { - public static string AutoGenerationHeader => "@Generated(\"com.microsoft.kiota\")"; public CodeEnumWriter(JavaConventionService conventionService) : base(conventionService) { } public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter writer) { @@ -23,7 +22,7 @@ public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter write string.Empty); conventions.WriteLongDescription(codeElement, writer); conventions.WriteDeprecatedAnnotation(codeElement, writer); - writer.WriteLine($"{AutoGenerationHeader}"); + writer.WriteLine($"{JavaConventionService.AutoGenerationHeader}"); writer.WriteLine($"public enum {enumName} implements ValuedEnum {{"); writer.IncreaseIndent(); var lastEnumOption = enumOptions.Last(); diff --git a/src/Kiota.Builder/Writers/Java/JavaConventionService.cs b/src/Kiota.Builder/Writers/Java/JavaConventionService.cs index 61e1d7bd10..c932cf5dc2 100644 --- a/src/Kiota.Builder/Writers/Java/JavaConventionService.cs +++ b/src/Kiota.Builder/Writers/Java/JavaConventionService.cs @@ -11,6 +11,7 @@ namespace Kiota.Builder.Writers.Java; public class JavaConventionService : CommonLanguageConventionService { + internal static string AutoGenerationHeader => "@jakarta.annotation.Generated(\"com.microsoft.kiota\")"; private const string InternalStreamTypeName = "InputStream"; public override string StreamTypeName => InternalStreamTypeName; private const string InternalVoidTypeName = "Void"; diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs index 93f3274b8c..f2f6ca0e1c 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeClassDeclarationWriterTests.cs @@ -10,7 +10,6 @@ namespace Kiota.Builder.Tests.Writers.Java; public class CodeClassDeclarationWriterTests : IDisposable { - private const string AutoGenerationHeader = "@Generated(\"com.microsoft.kiota\")"; private const string DefaultPath = "./"; private const string DefaultName = "name"; private readonly StringWriter tw; @@ -48,7 +47,7 @@ public void WritesAutoGeneratedHeader() { codeElementWriter.WriteCodeElement(parentClass.StartBlock, writer); var result = tw.ToString(); - Assert.Contains(AutoGenerationHeader, result); + Assert.Contains(JavaConventionService.AutoGenerationHeader, result); } [Fact] public void WritesImplementation() diff --git a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs index 68d48e84f7..352c999b09 100644 --- a/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Java/CodeEnumWriterTests.cs @@ -4,13 +4,13 @@ using Kiota.Builder.CodeDOM; using Kiota.Builder.Writers; +using Kiota.Builder.Writers.Java; using Xunit; namespace Kiota.Builder.Tests.Writers.Java; public class CodeEnumWriterTests : IDisposable { - private const string AutoGenerationHeader = "@Generated(\"com.microsoft.kiota\")"; private const string DefaultPath = "./"; private const string DefaultName = "name"; private readonly StringWriter tw; @@ -50,7 +50,7 @@ public void WritesEnum() Assert.Contains("@jakarta.annotation.Nullable", result); Assert.Contains("forValue(@jakarta.annotation.Nonnull final String searchValue)", result); Assert.Contains("default: return null;", result); - Assert.Contains(AutoGenerationHeader, result); + Assert.Contains(JavaConventionService.AutoGenerationHeader, result); AssertExtensions.CurlyBracesAreClosed(result); Assert.Contains(optionName, result); }