From 972120c35a31d20f51295e3ea66363d75304e9b7 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 1 Sep 2020 09:47:18 +0800 Subject: [PATCH] Correct allOf with only one child schema (no discriminator) (#6901) --- .../org/openapitools/codegen/utils/ModelUtils.java | 14 ++++++-------- .../openapitools/codegen/DefaultCodegenTest.java | 8 +++----- .../codegen/java/JavaInheritanceTest.java | 5 +++-- 3 files changed, 12 insertions(+), 15 deletions(-) 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 1b5f74bed47..d4996256b1c 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 @@ -1274,14 +1274,12 @@ public class ModelUtils { } } - // parent name only makes sense when there is a single obvious parent - if (refedWithoutDiscriminator.size() == 1) { - if (hasAmbiguousParents) { - LOGGER.warn("[deprecated] inheritance without use of 'discriminator.propertyName' is deprecated " + - "and will be removed in a future release. Generating model for composed schema name: {}. Title: {}", - composedSchema.getName(), composedSchema.getTitle()); - } - return refedWithoutDiscriminator.get(0); + if (refedWithoutDiscriminator.size() == 1 && hasAmbiguousParents) { + // allOf with a single $ref (no discriminator) + // TODO to be removed in 5.x or 6.x release + LOGGER.info("[deprecated] inheritance without use of 'discriminator.propertyName' has been deprecated" + + " in the 5.x release. Composed schema name: {}. Title: {}", + composedSchema.getName(), composedSchema.getTitle()); } return null; 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 472ee64f586..1ede1491958 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 @@ -1363,7 +1363,6 @@ public class DefaultCodegenTest { assertEquals(cm.discriminator, discriminator); } - @Test public void testAllOfSingleRefNoOwnProps() { final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/composed-allof.yaml"); @@ -1372,9 +1371,9 @@ public class DefaultCodegenTest { Schema schema = openAPI.getComponents().getSchemas().get("NewMessageEventCoreNoOwnProps"); codegen.setOpenAPI(openAPI); CodegenModel model = codegen.fromModel("NewMessageEventCoreNoOwnProps", schema); - Assert.assertEquals(getNames(model.getVars()), Collections.emptyList()); - Assert.assertEquals(model.parent, "MessageEventCore"); - Assert.assertEquals(model.allParents, Collections.singletonList("MessageEventCore")); + Assert.assertEquals(getNames(model.getVars()), Arrays.asList("id","message")); + Assert.assertNull(model.parent); + Assert.assertNull(model.allParents); } class CodegenWithMultipleInheritance extends DefaultCodegen { @@ -1385,7 +1384,6 @@ public class DefaultCodegenTest { } } - @Test public void testAllOfParent() { final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/allOf-required-parent.yaml"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaInheritanceTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaInheritanceTest.java index 1111b380384..ac94d91542f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaInheritanceTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaInheritanceTest.java @@ -25,6 +25,7 @@ import io.swagger.v3.oas.models.media.Discriminator; import io.swagger.v3.oas.models.media.ObjectSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; +import java.util.Collections; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenProperty; @@ -57,8 +58,8 @@ public class JavaInheritanceTest { Assert.assertEquals(cm.name, "sample"); Assert.assertEquals(cm.classname, "Sample"); - Assert.assertEquals(cm.parent, "Base"); - Assert.assertEquals(cm.imports, Sets.newHashSet("Base")); + Assert.assertNull(cm.parent); + Assert.assertEquals(cm.imports, Collections.emptySet()); } @Test(description = "convert a composed model with discriminator")