diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index 5e624585126e..b73f383bf3f5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -781,7 +781,7 @@ public class ModelUtils { } } else if (addlProps instanceof Schema) { // additionalProperties defined as {} - if (addlProps.getType() == null && (addlProps.getProperties() == null || addlProps.getProperties().isEmpty())) { + if (addlProps.getType() == null && addlProps.get$ref() == null && (addlProps.getProperties() == null || addlProps.getProperties().isEmpty())) { return true; } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientExperimentalTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientExperimentalTest.java index 5412564359fc..4807ea2f3ceb 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientExperimentalTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientExperimentalTest.java @@ -21,9 +21,15 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.*; import io.swagger.v3.parser.util.SchemaTypeUtil; + +import java.io.File; import java.math.BigDecimal; +import java.nio.file.Files; import java.util.Arrays; +import java.util.List; + import org.openapitools.codegen.*; +import org.openapitools.codegen.config.CodegenConfigurator; import org.openapitools.codegen.languages.PythonClientExperimentalCodegen; import org.openapitools.codegen.utils.ModelUtils; import org.testng.Assert; @@ -375,4 +381,22 @@ public class PythonClientExperimentalTest { Assert.assertEquals(noDefaultEumLengthOneModel.defaultValue, "15.0"); Assert.assertEquals(noDefaultEumLengthOneModel.hasRequired, false); } + + @Test + public void testObjectModelWithRefedAdditionalPropertiesIsGenerated() throws Exception { + File output = Files.createTempDirectory("test").toFile(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("python-experimental") + .setInputSpec("src/test/resources/3_0/issue_7372.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(clientOptInput).generate(); + + TestUtils.ensureContainsFile(files, output, "openapi_client/model/a.py"); + TestUtils.ensureContainsFile(files, output, "openapi_client/model/b.py"); + output.deleteOnExit(); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_7372.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_7372.yaml new file mode 100644 index 000000000000..7dcea8abd194 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue_7372.yaml @@ -0,0 +1,15 @@ +openapi: 3.0.0 +info: + title: foo + version: 1.0.0 +components: + schemas: + A: + type: object + additionalProperties: + $ref: '#/components/schemas/B' + B: + type: array + items: + type: object +paths: {} \ No newline at end of file