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 c499dec694c..d3958ef912a 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 @@ -881,7 +881,7 @@ public class ModelUtils { } else if (schema.getAdditionalProperties() instanceof JsonSchema) { return true; } else if (schema.getTypes() != null) { - if (schema.getTypes().size() == 1) { // types = [object] + if (schema.getTypes().size() == 1 && schema.getDiscriminator() == null) { // types = [object] return SchemaTypeUtil.OBJECT_TYPE.equals(schema.getTypes().iterator().next()); } else { // has more than 1 type, e.g. types = [integer, string] return false; 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 40bf8d83a5d..26e683ff321 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 @@ -4815,6 +4815,25 @@ public class DefaultCodegenTest { assertEquals(openAPI, codegen.openAPI); } + @Test + public void testParentModelGeneratedEvenWithoutProperties() throws Exception { + File output = Files.createTempDirectory("test_7638_").toFile(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setInputSpec("src/test/resources/3_1/issue_7638.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(clientOptInput).generate(); + + TestUtils.ensureContainsFile(files, output, "src/main/java/org/openapitools/client/model/Pet.java"); + TestUtils.ensureContainsFile(files, output, "src/main/java/org/openapitools/client/model/Dog.java"); + + output.deleteOnExit(); + } + @Test public void testReferencedEnumType() { final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue-5676-enums.yaml"); diff --git a/modules/openapi-generator/src/test/resources/3_1/issue_7638.yaml b/modules/openapi-generator/src/test/resources/3_1/issue_7638.yaml new file mode 100644 index 00000000000..936afac1ffe --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_1/issue_7638.yaml @@ -0,0 +1,34 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Parent Model Generated Even Without Properties", + "version": "1.0.0-SNAPSHOT" + }, + "servers": [ ], + "paths": { }, + "components": { + "schemas": { + "Pet": { + "type": "object", + "discriminator": { + "propertyName": "petType" + } + }, + "Dog": { + "allOf": [ + { + "$ref": "#/components/schemas/Pet" + }, + { + "type": "object", + "properties": { + "legs": { + "type": "string" + } + } + } + ] + } + } + } +} \ No newline at end of file