From c301004b7e5956f4bdaab2dfc9a57ade45fddbd8 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Tue, 7 Nov 2023 06:13:37 +0100 Subject: [PATCH] fix oneOf merging, upgrade dependencies (#16992) * fix oneOf enums * upgrade jackson dependencies * upgrade openRewrite dependency --- .../openapitools/codegen/DefaultCodegen.java | 26 ++++++++++++------- .../codegen/DefaultCodegenTest.java | 9 +++++++ pom.xml | 10 +++---- 3 files changed, 31 insertions(+), 14 deletions(-) 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 d8ee95b5ae9..73d39c8bc82 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 @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap; import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache.Compiler; import com.samskivert.mustache.Mustache.Lambda; +import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.core.util.Json; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -924,12 +925,7 @@ public class DefaultCodegen implements CodegenConfig { } } - /** - * Set the OpenAPI document. - * This method is invoked when the input OpenAPI document has been parsed and validated. - */ - @Override - public void setOpenAPI(OpenAPI openAPI) { + public boolean specVersionGreaterThanOrEqualTo310(OpenAPI openAPI) { String originalSpecVersion; String xOriginalSwaggerVersion = "x-original-swagger-version"; if (openAPI.getExtensions() != null && !openAPI.getExtensions().isEmpty() && openAPI.getExtensions().containsValue(xOriginalSwaggerVersion)) { @@ -939,8 +935,16 @@ public class DefaultCodegen implements CodegenConfig { } Integer specMajorVersion = Integer.parseInt(originalSpecVersion.substring(0, 1)); Integer specMinorVersion = Integer.parseInt(originalSpecVersion.substring(2, 3)); - boolean specVersionGreaterThanOrEqualTo310 = (specMajorVersion == 3 && specMinorVersion >= 1); - if (specVersionGreaterThanOrEqualTo310) { + return specMajorVersion == 3 && specMinorVersion >= 1; + } + + /** + * Set the OpenAPI document. + * This method is invoked when the input OpenAPI document has been parsed and validated. + */ + @Override + public void setOpenAPI(OpenAPI openAPI) { + if (specVersionGreaterThanOrEqualTo310(openAPI)) { LOGGER.warn(UNSUPPORTED_V310_SPEC_MSG); } this.openAPI = openAPI; @@ -2894,7 +2898,11 @@ public class DefaultCodegen implements CodegenConfig { if (null != existingProperties && null != newProperties) { Schema existingType = existingProperties.get("type"); Schema newType = newProperties.get("type"); - existingProperties.putAll(newProperties); + newProperties.forEach((key, value) -> + existingProperties.put( + key, + AnnotationsUtils.clone(value, specVersionGreaterThanOrEqualTo310(openAPI)) + )); if (null != existingType && null != newType && null != newType.getEnum() && !newType.getEnum().isEmpty()) { for (Object e : newType.getEnum()) { // ensure all interface enum types are added to schema 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 477cd09986a..8dbeeaba4ba 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 @@ -671,6 +671,15 @@ public class DefaultCodegenTest { } Assert.assertTrue(typeSeen); Assert.assertTrue(typeContainsEnums); + + Assert.assertEquals( + ((StringSchema) openAPI.getComponents().getSchemas().get("Dog").getProperties().get("type")).getEnum().size(), + 1 + ); + Assert.assertEquals( + ((StringSchema) openAPI.getComponents().getSchemas().get("Cat").getProperties().get("type")).getEnum().size(), + 1 + ); } @Test diff --git a/pom.xml b/pom.xml index 2fe01bad2d9..8ba0b3f2111 100644 --- a/pom.xml +++ b/pom.xml @@ -1452,9 +1452,9 @@ 3.0.9 32.1.3-jre 4.3.1 - 2.14.3 - 2.14.0 - 2.14.0 + 2.15.2 + 2.15.3 + 2.15.3 0.8.10 1.15 4.13.2 @@ -1470,7 +1470,7 @@ 4.0.0-M8 3.0.0 4.10.0 - 7.39.1 + 8.8.3 3.12.0 0.10.2 1.4 @@ -1478,7 +1478,7 @@ 1.7.36 3.1.12.2 io.swagger.parser.v3 - 2.1.14 + 2.1.18 7.5 1.34 3.4.3