From 5ffde3739350508fa2d185fc9ab44392516b250b Mon Sep 17 00:00:00 2001 From: Hippolyte HENRY Date: Mon, 18 Nov 2019 11:45:13 +0100 Subject: [PATCH 1/3] [Java][Go] Unalias schema in getTypeDeclaration when not generating model for alias --- .../codegen/languages/AbstractGoCodegen.java | 10 ++++++++-- .../codegen/languages/AbstractJavaCodegen.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 5a2ccc8154d0..1d253197e4d8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -278,10 +278,16 @@ public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { ArraySchema ap = (ArraySchema) p; Schema inner = ap.getItems(); - return "[]" + getTypeDeclaration(inner); + if (ModelUtils.isGenerateAliasAsModel()) + return "[]" + getTypeDeclaration(inner); + else + return "[]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); - return getSchemaType(p) + "[string]" + getTypeDeclaration(inner); + if (ModelUtils.isGenerateAliasAsModel()) + return getSchemaType(p) + "[string]" + getTypeDeclaration(inner); + else + return getSchemaType(p) + "[string]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); } //return super.getTypeDeclaration(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 823278ca949a..3e1056bbc0ba 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -689,7 +689,10 @@ public String toModelFilename(String name) { public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { Schema items = getSchemaItems((ArraySchema) p); - return getSchemaType(p) + "<" + getTypeDeclaration(items) + ">"; + if (ModelUtils.isGenerateAliasAsModel()) + return getSchemaType(p) + "<" + getTypeDeclaration(items) + ">"; + else + return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, items)) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); if (inner == null) { @@ -697,7 +700,10 @@ public String getTypeDeclaration(Schema p) { inner = new StringSchema().description("TODO default missing map inner type to string"); p.setAdditionalProperties(inner); } - return getSchemaType(p) + ""; + if (ModelUtils.isGenerateAliasAsModel()) + return getSchemaType(p) + ""; + else + return getSchemaType(p) + ""; } return super.getTypeDeclaration(p); } From 91e1487a6f1918c121592ecc3fc70cb7b90be34b Mon Sep 17 00:00:00 2001 From: Hippolyte HENRY Date: Mon, 18 Nov 2019 14:29:38 +0100 Subject: [PATCH 2/3] Add tests --- .../codegen/go/AbstractGoCodegenTest.java | 39 +++++++++++++++++++ .../codegen/java/AbstractJavaCodegenTest.java | 32 +++++++++++++-- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/AbstractGoCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/AbstractGoCodegenTest.java index 3663571d413e..50805b447223 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/AbstractGoCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/AbstractGoCodegenTest.java @@ -17,9 +17,17 @@ package org.openapitools.codegen.go; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.IntegerSchema; +import io.swagger.v3.oas.models.media.MapSchema; +import io.swagger.v3.oas.models.media.Schema; import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.java.AbstractJavaCodegenTest; import org.openapitools.codegen.languages.AbstractGoCodegen; +import org.openapitools.codegen.utils.ModelUtils; import org.testng.Assert; import org.testng.annotations.Test; @@ -54,6 +62,37 @@ public void testAdditionalPropertiesPutForConfigValues() throws Exception { Assert.assertEquals(codegen.isHideGenerationTimestamp(), true); } + @Test + public void getTypeDeclarationTest() { + final AbstractGoCodegen codegen = new P_AbstractGoCodegen(); + + // Create an alias to an array schema + Schema nestedArraySchema = new ArraySchema().items(new IntegerSchema().format("int32")); + codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas("NestedArray", nestedArraySchema))); + + // Create an array schema with item type set to the array alias + Schema schema = new ArraySchema().items(new Schema().$ref("#/components/schemas/NestedArray")); + + ModelUtils.setGenerateAliasAsModel(false); + String defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "[][]int32"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "[]NestedArray"); + + // Create a map schema with additionalProperties type set to array alias + schema = new MapSchema().additionalProperties(new Schema().$ref("#/components/schemas/NestedArray")); + + ModelUtils.setGenerateAliasAsModel(false); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "map[string][]int32"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "map[string]NestedArray"); + } + private static class P_AbstractGoCodegen extends AbstractGoCodegen { @Override public CodegenType getTag() { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java index 73ee84e92659..32478998bd73 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java @@ -17,15 +17,15 @@ package org.openapitools.codegen.java; +import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.media.IntegerSchema; -import io.swagger.v3.oas.models.media.ObjectSchema; -import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.media.*; import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.languages.AbstractJavaCodegen; +import org.openapitools.codegen.utils.ModelUtils; import org.testng.Assert; import org.testng.annotations.Test; @@ -420,6 +420,32 @@ public void getTypeDeclarationTest() { Schema schema = createObjectSchemaWithMinItems(); String defaultValue = codegen.getTypeDeclaration(schema); Assert.assertEquals(defaultValue, "Object"); + + // Create an alias to an array schema + Schema nestedArraySchema = new ArraySchema().items(new IntegerSchema().format("int32")); + codegen.setOpenAPI(new OpenAPI().components(new Components().addSchemas("NestedArray", nestedArraySchema))); + + // Create an array schema with item type set to the array alias + schema = new ArraySchema().items(new Schema().$ref("#/components/schemas/NestedArray")); + + ModelUtils.setGenerateAliasAsModel(false); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "List>"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "List"); + + // Create a map schema with additionalProperties type set to array alias + schema = new MapSchema().additionalProperties(new Schema().$ref("#/components/schemas/NestedArray")); + + ModelUtils.setGenerateAliasAsModel(false); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "Map>"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "Map"); } @Test From a329869a236b67a6be259de5bf518e7ee36e2743 Mon Sep 17 00:00:00 2001 From: Hippolyte HENRY Date: Wed, 20 Nov 2019 10:06:29 +0100 Subject: [PATCH 3/3] Don't use isGenerateAliasAsModel --- .../codegen/languages/AbstractGoCodegen.java | 10 ++-------- .../codegen/languages/AbstractJavaCodegen.java | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 1d253197e4d8..83f9c5511c2b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -278,16 +278,10 @@ public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { ArraySchema ap = (ArraySchema) p; Schema inner = ap.getItems(); - if (ModelUtils.isGenerateAliasAsModel()) - return "[]" + getTypeDeclaration(inner); - else - return "[]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); + return "[]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); - if (ModelUtils.isGenerateAliasAsModel()) - return getSchemaType(p) + "[string]" + getTypeDeclaration(inner); - else - return getSchemaType(p) + "[string]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); + return getSchemaType(p) + "[string]" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, inner)); } //return super.getTypeDeclaration(p); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 3e1056bbc0ba..4d99af1c0584 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -689,10 +689,7 @@ public String toModelFilename(String name) { public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { Schema items = getSchemaItems((ArraySchema) p); - if (ModelUtils.isGenerateAliasAsModel()) - return getSchemaType(p) + "<" + getTypeDeclaration(items) + ">"; - else - return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, items)) + ">"; + return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, items)) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); if (inner == null) { @@ -700,10 +697,7 @@ public String getTypeDeclaration(Schema p) { inner = new StringSchema().description("TODO default missing map inner type to string"); p.setAdditionalProperties(inner); } - if (ModelUtils.isGenerateAliasAsModel()) - return getSchemaType(p) + ""; - else - return getSchemaType(p) + ""; + return getSchemaType(p) + ""; } return super.getTypeDeclaration(p); }