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 e55479e4a31..8dac545365a 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 @@ -1236,7 +1236,6 @@ public class ModelUtils { public static List getAllParentsName(ComposedSchema composedSchema, Map allSchemas, boolean includeAncestors) { List interfaces = getInterfaces(composedSchema); List names = new ArrayList(); - List refedWithoutDiscriminator = new ArrayList<>(); if (interfaces != null && !interfaces.isEmpty()) { for (Schema schema : interfaces) { @@ -1255,7 +1254,6 @@ public class ModelUtils { } } else { // not a parent since discriminator.propertyName is not set - refedWithoutDiscriminator.add(parentName); } } else { // not a ref, doing nothing @@ -1263,10 +1261,11 @@ public class ModelUtils { } } - if (names.size() == 0 && refedWithoutDiscriminator.size() == 1) { - LOGGER.warn("[deprecated] inheritance without use of 'discriminator.propertyName' is deprecated " + - "and will be removed in a future release. Generating model for {}. Title: {}", composedSchema.getName(), composedSchema.getTitle()); - return refedWithoutDiscriminator; + // ensure `allParents` always includes `parent` + // this is more robust than keeping logic in getParentName() and getAllParentsName() in sync + String parentName = getParentName(composedSchema, allSchemas); + if (parentName != null && !names.contains(parentName)) { + names.add(parentName); } return names; 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 ead422552b7..e655027890e 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 @@ -604,6 +604,18 @@ public class DefaultCodegenTest { Assert.assertEquals(getRequiredVars(childModel), Collections.singletonList("name")); } + @Test + public void testAllOfSingleRefWithOwnPropsNoDiscriminator() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/composed-allof.yaml"); + final DefaultCodegen codegen = new CodegenWithMultipleInheritance(); + + Schema schema = openAPI.getComponents().getSchemas().get("MessageEventCoreWithTimeListEntries"); + codegen.setOpenAPI(openAPI); + CodegenModel model = codegen.fromModel("MessageEventCoreWithTimeListEntries", schema); + Assert.assertEquals(model.parent, "MessageEventCore"); + Assert.assertEquals(model.allParents, Collections.singletonList("MessageEventCore")); + } + @Test public void testAllOfSingleRefNoOwnProps() { final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/composed-allof.yaml");