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 c2347eabfdbc..370ad8f82e9f 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 @@ -1788,6 +1788,17 @@ public CodegenModel fromModel(String name, Schema schema) { Map allProperties = new LinkedHashMap(); List allRequired = new ArrayList(); + // if schema has properties outside of allOf/oneOf/anyOf also add them to m + if (schema.getProperties() != null) { + addVars(m, unaliasPropertySchema(schema.getProperties()), schema.getRequired(), null, null); + } + + // uncomment this when https://github.com/swagger-api/swagger-parser/issues/1252 is resolved + // if schema has additionalproperties outside of allOf/oneOf/anyOf also add it to m + // if (schema.getAdditionalProperties() != null) { + // addAdditionPropertiesToCodeGenModel(m, schema); + // } + // parent model final String parentName = ModelUtils.getParentName(composed, allDefinitions); final List allParents = ModelUtils.getAllParentsName(composed, allDefinitions); 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 609e57e946b0..41e83880097d 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 @@ -268,6 +268,41 @@ public void testGetSchemaTypeWithComposedSchemaWithOneOf() { Assert.assertEquals(type, "oneOf"); } + @Test + public void testComposedSchemaOneOfWithProperties() { + final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/oneOf.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + + final Schema schema = openAPI.getComponents().getSchemas().get("fruit"); + codegen.setOpenAPI(openAPI); + CodegenModel fruit = codegen.fromModel("Fruit", schema); + + Set oneOf = new TreeSet(); + oneOf.add("Apple"); + oneOf.add("Banana"); + Assert.assertEquals(fruit.oneOf, oneOf); + Assert.assertEquals(fruit.optionalVars.size(), 3); + Assert.assertEquals(fruit.vars.size(), 3); + // make sure that fruit has the property color + boolean colorSeen = false; + for (CodegenProperty cp : fruit.vars) { + if (cp.name.equals("color")) { + colorSeen = true; + break; + } + } + Assert.assertTrue(colorSeen); + colorSeen = false; + for (CodegenProperty cp : fruit.optionalVars) { + if (cp.name.equals("color")) { + colorSeen = true; + break; + } + } + Assert.assertTrue(colorSeen); + } + + @Test public void testEscapeText() { final DefaultCodegen codegen = new DefaultCodegen(); diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml index d98fcf6667ac..b9f0938421eb 100644 --- a/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/oneOf.yaml @@ -22,6 +22,9 @@ components: oneOf: - $ref: '#/components/schemas/apple' - $ref: '#/components/schemas/banana' + # additionalProperties: + # type: string + # uncomment this when https://github.com/swagger-api/swagger-parser/issues/1252 is resolved apple: title: apple type: object