diff --git a/modules/openapi-generator/src/main/resources/Java/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/Java/oneof_interface.mustache index eadcb26b829..07a7a82412d 100644 --- a/modules/openapi-generator/src/main/resources/Java/oneof_interface.mustache +++ b/modules/openapi-generator/src/main/resources/Java/oneof_interface.mustache @@ -1,4 +1,7 @@ {{>additionalOneOfTypeAnnotations}}{{>generatedAnnotation}}{{>typeInfoAnnotation}}{{>xmlAnnotation}} +{{#vendorExtensions.x-class-extra-annotation}} +{{{vendorExtensions.x-class-extra-annotation}}} +{{/vendorExtensions.x-class-extra-annotation}} public {{>sealed}}interface {{classname}} {{#vendorExtensions.x-implements}}{{#-first}}extends {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}}{{>permits}}{ {{#discriminator}} public {{propertyType}} {{propertyGetter}}(); diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache index 98db2c7cf4e..00fca619c74 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/oneof_interface.mustache @@ -13,7 +13,8 @@ @JsonSubTypes.Type(value = {{classname}}.class){{^-last}}, {{/-last}} {{/interfaceModels}} }) -{{/useDeductionForOneOfInterfaces}} +{{/useDeductionForOneOfInterfaces}}{{#vendorExtensions.x-class-extra-annotation}}{{{vendorExtensions.x-class-extra-annotation}}} +{{/vendorExtensions.x-class-extra-annotation}} {{/discriminator}} {{>generatedAnnotation}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index da4e3735b8c..fdef15df283 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -3982,4 +3982,21 @@ public class JavaClientCodegenTest { } assertTrue(speciesSeen); } + + @Test + public void testOneOfClassWithAnnotation() throws IOException { + final Map files = generateFromContract("src/test/resources/3_0/java/oneOf-with-annotations.yaml", RESTCLIENT); + JavaFileAssert.assertThat(files.get("Fruit.java")) + .isNormalClass() + .assertTypeAnnotations().containsWithName("SuppressWarnings"); + } + + @Test + public void testOneOfInterfaceWithAnnotation() throws IOException { + final Map files = generateFromContract("src/test/resources/3_0/java/oneOf-with-annotations.yaml", RESTCLIENT, + Map.of(USE_ONE_OF_INTERFACES, "true")); + JavaFileAssert.assertThat(files.get("Fruit.java")) + .isInterface() + .assertTypeAnnotations().containsWithName("SuppressWarnings"); + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 582af3e770c..e85833a6caf 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -5730,4 +5730,12 @@ public class SpringCodegenTest { javaFileAssert .hasImports("java.util.concurrent.atomic.AtomicInteger"); } + + @Test + public void testOneOfInterfaceWithAnnotation() throws IOException { + final Map files = generateFromContract("src/test/resources/3_0/java/oneOf-with-annotations.yaml", SPRING_BOOT); + JavaFileAssert.assertThat(files.get("Fruit.java")) + .isInterface() + .assertTypeAnnotations().containsWithName("SuppressWarnings"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/java/oneOf-with-annotations.yaml b/modules/openapi-generator/src/test/resources/3_0/java/oneOf-with-annotations.yaml new file mode 100644 index 00000000000..2dc849dbdff --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/java/oneOf-with-annotations.yaml @@ -0,0 +1,44 @@ +openapi: 3.0.1 +info: + title: fruity + version: 0.0.1 +paths: + /: + get: + responses: + '200': + description: desc + content: + application/json: + schema: + $ref: '#/components/schemas/fruit' +components: + schemas: + fruit: + title: fruit + x-class-extra-annotation: '@SuppressWarnings("unchecked")' + properties: + color: + type: string + oneOf: + - $ref: '#/components/schemas/apple' + - $ref: '#/components/schemas/banana' + - $ref: '#/components/schemas/orange' + apple: + title: apple + type: object + properties: + kind: + type: string + banana: + title: banana + type: object + properties: + count: + type: number + orange: + title: orange + type: object + properties: + sweet: + type: boolean