diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index e694154fe91b..848022ecd446 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -5711,6 +5711,9 @@ public CodegenParameter fromParameter(Parameter parameter, Set imports) if (codegenProperty.isEnum) { codegenParameter.datatypeWithEnum = codegenProperty.datatypeWithEnum; codegenParameter.enumName = codegenProperty.enumName; + if(codegenParameter.dataType != null && !codegenParameter.dataType.contains("&") && !codegenParameter.dataType.contains("<")) { + imports.add(codegenParameter.dataType); + } if (codegenProperty.defaultValue != null) { codegenParameter.enumDefaultValue = codegenProperty.defaultValue.replace(codegenProperty.enumName + ".", ""); } @@ -5721,6 +5724,9 @@ public CodegenParameter fromParameter(Parameter parameter, Set imports) codegenParameter.enumName = codegenProperty.enumName; codegenParameter.items = codegenProperty.items; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; + if(codegenParameter.items.dataType != null && !codegenParameter.items.dataType.contains("&") && !codegenParameter.items.dataType.contains("<")) { + imports.add(codegenParameter.items.dataType); + } } codegenParameter.collectionFormat = collectionFormat; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 72624f257e5a..22572c802105 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -31,6 +31,7 @@ import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.media.*; +import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.parameters.QueryParameter; import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.oas.models.responses.ApiResponse; @@ -57,6 +58,7 @@ import java.util.concurrent.*; import java.util.stream.Collectors; +import static com.fasterxml.jackson.databind.util.ClassUtil.name; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.junit.jupiter.api.Assertions.*; @@ -5427,4 +5429,23 @@ public void splitOperationsByContentTypeIsAGlobalOption() { off.processOpts(); assertThat(off.splitOperationsByContentType).isFalse(); } + + @Test + public void testFromParameterEnumImports() { + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_1/issue24875-enum-parameter-import.yaml"); + DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + + Operation operation = openAPI.getPaths().get("/archives").getGet(); + Parameter parameter = operation.getParameters().get(0); + + Set imports = new HashSet<>(); + codegen.fromParameter(parameter, imports); + + // Assert enum type is present in imports + Assert.assertTrue( + imports.contains("State"), + "Expected enum 'State' to be present in imports but got: " + imports + ); + } } diff --git a/modules/openapi-generator/src/test/resources/3_1/issue24875-enum-parameter-import.yaml b/modules/openapi-generator/src/test/resources/3_1/issue24875-enum-parameter-import.yaml new file mode 100644 index 000000000000..cdb04124aa26 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_1/issue24875-enum-parameter-import.yaml @@ -0,0 +1,26 @@ +openapi: 3.1.0 +info: + title: Enum parameter import + version: 1.0.0 +paths: + /archives: + get: + operationId: listArchives + parameters: + - name: state + in: query + required: false + schema: + $ref: "#/components/schemas/Archive/properties/state" + responses: + "200": + description: Success +components: + schemas: + Archive: + type: object + properties: + state: + type: string + enum: + - ACTIVE