diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 5a847d0afc1..43767dc58d0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -1088,6 +1088,10 @@ public class JavaClientCodegen extends AbstractJavaCodegen } } + if (!AnnotationLibrary.SWAGGER2.equals(getAnnotationLibrary())) { + codegenModel.imports.remove("Schema"); + } + return codegenModel; } 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 fd0e7271c9f..da4e3735b8c 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 @@ -3481,6 +3481,64 @@ public class JavaClientCodegenTest { ); } + @Test + public void annotationLibraryDoesNotCauseImportConflicts() throws IOException { + Map properties = new HashMap<>(); + properties.put("annotationLibrary", "none"); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(JAVA_GENERATOR) + .setLibrary(JavaClientCodegen.NATIVE) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/java/native/issue21991.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + + Map files = generator.opts(clientOptInput).generate().stream() + .collect(Collectors.toMap(File::getName, Function.identity())); + + File apiFile = files.get("Schema.java"); + assertNotNull(apiFile); + + JavaFileAssert.assertThat(apiFile).fileDoesNotContain( + "import io.swagger.v3.oas.annotations.media.Schema;" + ); + } + + @Test + public void annotationLibraryGeneratesCorrectImports() throws IOException { + Map properties = new HashMap<>(); + properties.put("annotationLibrary", "swagger2"); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(JAVA_GENERATOR) + .setLibrary(JavaClientCodegen.NATIVE) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/java/native/issue21991.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + + Map files = generator.opts(clientOptInput).generate().stream() + .collect(Collectors.toMap(File::getName, Function.identity())); + + File apiFile = files.get("Schema.java"); + assertNotNull(apiFile); + + JavaFileAssert.assertThat(apiFile).fileContains( + "import io.swagger.v3.oas.annotations.media.Schema;" + ); + } + /** * This checks that the async client is not affected by this fix. @@ -3924,4 +3982,4 @@ public class JavaClientCodegenTest { } assertTrue(speciesSeen); } -} \ No newline at end of file +} diff --git a/modules/openapi-generator/src/test/resources/3_0/java/native/issue21991.yaml b/modules/openapi-generator/src/test/resources/3_0/java/native/issue21991.yaml new file mode 100644 index 00000000000..eef776934da --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/java/native/issue21991.yaml @@ -0,0 +1,29 @@ +openapi: 3.0.3 +info: + title: Example Hello API + description: '' + version: v1 +servers: + - url: http://localhost + description: Global Endpoint +paths: + /v1/emptyResponse: + get: + operationId: empty + description: returns an empty response + responses: + 200: + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Schema' + 204: + description: Empty response +components: + schemas: + Schema: + type: object + properties: + name: + type: string