From 4b6d7cecaba2347b3735c9f440c6ed5a62844119 Mon Sep 17 00:00:00 2001 From: Hippolyte HENRY Date: Thu, 16 Jan 2020 17:45:12 +0100 Subject: [PATCH] [Java] Unalias type when generating default value for model property --- .../languages/AbstractJavaCodegen.java | 15 ++++++----- .../codegen/java/AbstractJavaCodegenTest.java | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) 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 af6e1cde6ccf..1ac321b7f673 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 @@ -732,19 +732,20 @@ public String toModelFilename(String name) { @Override public String getTypeDeclaration(Schema p) { - if (ModelUtils.isArraySchema(p)) { - Schema items = getSchemaItems((ArraySchema) p); - return getSchemaType(p) + "<" + getTypeDeclaration(ModelUtils.unaliasSchema(this.openAPI, items)) + ">"; - } else if (ModelUtils.isMapSchema(p)) { - Schema inner = ModelUtils.getAdditionalProperties(p); + Schema unaliasedSchema = ModelUtils.unaliasSchema(this.openAPI, p); + if (ModelUtils.isArraySchema(unaliasedSchema)) { + Schema items = getSchemaItems((ArraySchema) unaliasedSchema); + return getSchemaType(unaliasedSchema) + "<" + getTypeDeclaration(items) + ">"; + } else if (ModelUtils.isMapSchema(unaliasedSchema)) { + Schema inner = ModelUtils.getAdditionalProperties(unaliasedSchema); if (inner == null) { LOGGER.error("`{}` (map property) does not have a proper inner type defined. Default to type:string", p.getName()); inner = new StringSchema().description("TODO default missing map inner type to string"); p.setAdditionalProperties(inner); } - return getSchemaType(p) + ""; + return getSchemaType(unaliasedSchema) + ""; } - return super.getTypeDeclaration(p); + return super.getTypeDeclaration(unaliasedSchema); } @Override 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 a69538180e12..af6a4e6dc08b 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 @@ -411,6 +411,32 @@ public void toDefaultValueTest() { Schema schema = createObjectSchemaWithMinItems(); String defaultValue = codegen.toDefaultValue(schema); Assert.assertNull(defaultValue); + + // 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.toDefaultValue(schema); + Assert.assertEquals(defaultValue, "new ArrayList>()"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.toDefaultValue(schema); + Assert.assertEquals(defaultValue, "new ArrayList()"); + + // 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.toDefaultValue(schema); + Assert.assertEquals(defaultValue, "new HashMap>()"); + + ModelUtils.setGenerateAliasAsModel(true); + defaultValue = codegen.toDefaultValue(schema); + Assert.assertEquals(defaultValue, "new HashMap()"); } @Test