From 68d907080e2cfd38aa67cd0aea7488acf2f5a15e Mon Sep 17 00:00:00 2001 From: Jeremie Bresson <dev@jmini.fr> Date: Wed, 28 Aug 2019 09:20:14 +0200 Subject: [PATCH 1/2] [core] do not always cast to ArraySchema --- .../openapitools/codegen/DefaultCodegen.java | 66 +++++++++---------- .../codegen/examples/ExampleGenerator.java | 14 ++-- .../languages/AbstractJavaCodegen.java | 18 +---- .../codegen/java/AbstractJavaCodegenTest.java | 19 +++++- 4 files changed, 57 insertions(+), 60 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 4a99f26be63..0a1245801d2 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 @@ -1246,8 +1246,7 @@ public class DefaultCodegen implements CodegenConfig { String inner = getSchemaType(additionalProperties); return instantiationTypes.get("map") + "<String, " + inner + ">"; } else if (ModelUtils.isArraySchema(schema)) { - ArraySchema arraySchema = (ArraySchema) schema; - String inner = getSchemaType(arraySchema.getItems()); + String inner = getSchemaType(getSchemaItems(schema)); return instantiationTypes.get("array") + "<" + inner + ">"; } else { return null; @@ -1462,6 +1461,17 @@ public class DefaultCodegen implements CodegenConfig { } + protected Schema<?> getSchemaItems(Schema schema) { + Schema<?> items; + if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() != null) { + items = ((ArraySchema) schema).getItems(); + } else { + LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName()); + items = new StringSchema().description("TODO default missing array inner type to string"); + } + return items; + } + /** * Return the name of the allOf schema * @@ -2180,10 +2190,8 @@ public class DefaultCodegen implements CodegenConfig { property.isFreeFormObject = true; } else if (ModelUtils.isArraySchema(p)) { // default to string if inner item is undefined - Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, ((ArraySchema) p).getItems()); - if (innerSchema == null) { - LOGGER.error("Undefined array inner type for `{}`. Default to String.", p.getName()); - innerSchema = new StringSchema().description("//TODO automatically added by openapi-generator due to undefined type"); + Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(p)); + if (p instanceof ArraySchema && ((ArraySchema) p).getItems() == null) { ((ArraySchema) p).setItems(innerSchema); } } else if (ModelUtils.isMapSchema(p)) { @@ -2262,10 +2270,8 @@ public class DefaultCodegen implements CodegenConfig { if (itemName == null) { itemName = property.name; } - Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, ((ArraySchema) p).getItems()); - if (innerSchema == null) { - LOGGER.error("Undefined array inner type for `{}`. Default to String.", p.getName()); - innerSchema = new StringSchema().description("//TODO automatically added by openapi-generator due to undefined type"); + Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(p)); + if (p instanceof ArraySchema && ((ArraySchema) p).getItems() == null) { ((ArraySchema) p).setItems(innerSchema); } CodegenProperty cp = fromProperty(itemName, innerSchema); @@ -2583,8 +2589,7 @@ public class DefaultCodegen implements CodegenConfig { CodegenProperty cm = fromProperty("response", responseSchema); if (ModelUtils.isArraySchema(responseSchema)) { - ArraySchema as = (ArraySchema) responseSchema; - CodegenProperty innerProperty = fromProperty("response", as.getItems()); + CodegenProperty innerProperty = fromProperty("response", getSchemaItems(responseSchema)); op.returnBaseType = innerProperty.baseType; } else if (ModelUtils.isMapSchema(responseSchema)) { CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema)); @@ -2853,8 +2858,7 @@ public class DefaultCodegen implements CodegenConfig { CodegenProperty cp = fromProperty("response", responseSchema); if (ModelUtils.isArraySchema(responseSchema)) { - ArraySchema as = (ArraySchema) responseSchema; - CodegenProperty innerProperty = fromProperty("response", as.getItems()); + CodegenProperty innerProperty = fromProperty("response", getSchemaItems(responseSchema)); CodegenProperty innerCp = innerProperty; while (innerCp != null) { r.baseType = innerCp.baseType; @@ -3061,12 +3065,9 @@ public class DefaultCodegen implements CodegenConfig { // TDOO revise collectionFormat String collectionFormat = null; if (ModelUtils.isArraySchema(parameterSchema)) { // for array parameter - final ArraySchema arraySchema = (ArraySchema) parameterSchema; - Schema inner = arraySchema.getItems(); - if (inner == null) { - LOGGER.warn("warning! No inner type supplied for array parameter \"" + parameter.getName() + "\", using String"); - inner = new StringSchema().description("//TODO automatically added by openapi-generator due to missing iner type definition in the spec"); - arraySchema.setItems(inner); + Schema inner = getSchemaItems(parameterSchema); + if (parameterSchema instanceof ArraySchema && ((ArraySchema) parameterSchema).getItems() == null) { + ((ArraySchema) parameterSchema).setItems(inner); } collectionFormat = getCollectionFormat(parameter); @@ -4597,12 +4598,9 @@ public class DefaultCodegen implements CodegenConfig { Schema s = entry.getValue(); // array of schema if (ModelUtils.isArraySchema(s)) { - final ArraySchema arraySchema = (ArraySchema) s; - Schema inner = arraySchema.getItems(); - if (inner == null) { - LOGGER.error("No inner type supplied for array parameter `{}`. Default to type:string", s.getName()); - inner = new StringSchema().description("//TODO automatically added by openapi-generator due to missing inner type definition in the spec"); - arraySchema.setItems(inner); + Schema inner = getSchemaItems(s); + if (s instanceof ArraySchema && ((ArraySchema) s).getItems() == null) { + ((ArraySchema) s).setItems(inner); } codegenParameter = fromFormProperty(entry.getKey(), inner, imports); @@ -4614,7 +4612,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.isContainer = true; codegenParameter.isListContainer = true; codegenParameter.description = escapeText(s.getDescription()); - codegenParameter.dataType = getTypeDeclaration(arraySchema); + codegenParameter.dataType = getTypeDeclaration(s); if (codegenParameter.baseType != null && codegenParameter.enumName != null) { codegenParameter.datatypeWithEnum = codegenParameter.dataType.replace(codegenParameter.baseType, codegenParameter.enumName); } else { @@ -4797,14 +4795,12 @@ public class DefaultCodegen implements CodegenConfig { // set nullable setParameterNullable(codegenParameter, codegenProperty); } else if (ModelUtils.isArraySchema(schema)) { - final ArraySchema arraySchema = (ArraySchema) schema; - Schema inner = arraySchema.getItems(); - if (inner == null) { - LOGGER.error("No inner type supplied for array parameter `{}`. Default to type:string", schema.getName()); - inner = new StringSchema().description("//TODO automatically added by openapi-generator due to undefined type"); - arraySchema.setItems(inner); + Schema inner = getSchemaItems(schema); + if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() == null) { + ((ArraySchema) schema).setItems(inner); } - CodegenProperty codegenProperty = fromProperty("property", arraySchema); + + CodegenProperty codegenProperty = fromProperty("property", schema); imports.add(codegenProperty.baseType); CodegenProperty innerCp = codegenProperty; CodegenProperty mostInnerItem = innerCp; @@ -4830,7 +4826,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.paramName = toArrayModelParamName(codegenParameter.baseName); codegenParameter.items = codegenProperty.items; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; - codegenParameter.dataType = getTypeDeclaration(arraySchema); + codegenParameter.dataType = getTypeDeclaration(schema); codegenParameter.baseType = getSchemaType(inner); codegenParameter.isContainer = Boolean.TRUE; codegenParameter.isListContainer = Boolean.TRUE; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java index 5ce8089d198..6393286ee22 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java @@ -79,13 +79,13 @@ public class ExampleGenerator { } if (ModelUtils.isArraySchema(responseSchema)) { // array of schema - ArraySchema as = (ArraySchema) responseSchema; - if (as.getItems() != null && StringUtils.isEmpty(as.getItems().get$ref())) { // arary of primtive types + Schema<?> items = (responseSchema instanceof ArraySchema) ? ((ArraySchema) responseSchema).getItems() : null; + if (items != null && StringUtils.isEmpty(items.get$ref())) { // arary of primtive types return generate((Map<String, Object>) responseSchema.getExample(), - new ArrayList<String>(producesInfo), as.getItems()); - } else if (as.getItems() != null && !StringUtils.isEmpty(as.getItems().get$ref())) { // array of model + new ArrayList<String>(producesInfo), items); + } else if (items != null && !StringUtils.isEmpty(items.get$ref())) { // array of model return generate((Map<String, Object>) responseSchema.getExample(), - new ArrayList<String>(producesInfo), ModelUtils.getSimpleRef(as.getItems().get$ref())); + new ArrayList<String>(producesInfo), ModelUtils.getSimpleRef(items.get$ref())); } else { // TODO log warning message as such case is not handled at the moment return null; @@ -229,9 +229,9 @@ public class ExampleGenerator { } return Boolean.TRUE; } else if (ModelUtils.isArraySchema(property)) { - Schema innerType = ((ArraySchema) property).getItems(); + Schema<?> innerType = (property instanceof ArraySchema) ? ((ArraySchema) property).getItems() : null; if (innerType != null) { - int arrayLength = null == ((ArraySchema) property).getMaxItems() ? 2 : ((ArraySchema) property).getMaxItems(); + int arrayLength = null == property.getMaxItems() ? 2 : property.getMaxItems(); // avoid memory issues by limiting to max. 5 items arrayLength = Math.min(arrayLength, 5); Object[] objectProperties = new Object[arrayLength]; 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 1e77a694db8..18507859246 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 @@ -686,14 +686,8 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - ArraySchema ap = (ArraySchema) p; - Schema inner = ap.getItems(); - if (inner == null) { - LOGGER.error("`{}` (array property) does not have a proper inner type defined. Default to type:string", ap.getName()); - inner = new StringSchema().description("TODO default missing array inner type to string"); - ap.setItems(inner); - } - return getSchemaType(p) + "<" + getTypeDeclaration(inner) + ">"; + Schema<?> items = getSchemaItems(p); + return getSchemaType(p) + "<" + getTypeDeclaration(items) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); if (inner == null) { @@ -725,13 +719,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code pattern = "new ArrayList<%s>()"; } - Schema<?> items; - if (p instanceof ArraySchema && ((ArraySchema) p).getItems() != null) { - items = ((ArraySchema) p).getItems(); - } else { - LOGGER.error("`{}` (array property) does not have a proper inner type defined. Default to type:string", p.getName()); - items = new StringSchema().description("TODO default missing array inner type to string"); - } + Schema<?> items = getSchemaItems(p); String typeDeclaration = getTypeDeclaration(items); Object java8obj = additionalProperties.get("java8"); 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 0fe770d44da..e8de94dc5fc 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 @@ -310,13 +310,26 @@ public class AbstractJavaCodegenTest { public void toDefaultValueTest() { final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); - Schema schema = new ObjectSchema() - .addProperties("id", new IntegerSchema().format("int32")) - .minItems(1); + Schema<?> schema = createObjectSchemaWithMinItems(); String defaultValue = codegen.toDefaultValue(schema); Assert.assertEquals(defaultValue, "new ArrayList<String>()"); } + @Test + public void getTypeDeclarationTest() { + final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); + + Schema<?> schema = createObjectSchemaWithMinItems(); + String defaultValue = codegen.getTypeDeclaration(schema); + Assert.assertEquals(defaultValue, "List<String>"); + } + + private static Schema<?> createObjectSchemaWithMinItems() { + return new ObjectSchema() + .addProperties("id", new IntegerSchema().format("int32")) + .minItems(1); + } + private static class P_AbstractJavaCodegen extends AbstractJavaCodegen { @Override public CodegenType getTag() { -- GitLab From df39ed1d71289bfaa651799b01eec33a6724c379 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson <dev@jmini.fr> Date: Wed, 28 Aug 2019 18:10:33 +0200 Subject: [PATCH 2/2] Change ModelUtil.isArraySchema() --- .../openapitools/codegen/DefaultCodegen.java | 61 ++++++++++--------- .../codegen/examples/ExampleGenerator.java | 14 ++--- .../languages/AbstractJavaCodegen.java | 4 +- .../codegen/utils/ModelUtils.java | 9 +-- .../codegen/java/AbstractJavaCodegenTest.java | 4 +- 5 files changed, 45 insertions(+), 47 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 0a1245801d2..71299a3ace2 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 @@ -1246,7 +1246,8 @@ public class DefaultCodegen implements CodegenConfig { String inner = getSchemaType(additionalProperties); return instantiationTypes.get("map") + "<String, " + inner + ">"; } else if (ModelUtils.isArraySchema(schema)) { - String inner = getSchemaType(getSchemaItems(schema)); + ArraySchema arraySchema = (ArraySchema) schema; + String inner = getSchemaType(getSchemaItems(arraySchema)); return instantiationTypes.get("array") + "<" + inner + ">"; } else { return null; @@ -1461,15 +1462,13 @@ public class DefaultCodegen implements CodegenConfig { } - protected Schema<?> getSchemaItems(Schema schema) { - Schema<?> items; - if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() != null) { - items = ((ArraySchema) schema).getItems(); + protected Schema<?> getSchemaItems(ArraySchema schema) { + if (schema.getItems() != null) { + return schema.getItems(); } else { LOGGER.error("Undefined array inner type for `{}`. Default to String.", schema.getName()); - items = new StringSchema().description("TODO default missing array inner type to string"); + return new StringSchema().description("TODO default missing array inner type to string"); } - return items; } /** @@ -2190,9 +2189,10 @@ public class DefaultCodegen implements CodegenConfig { property.isFreeFormObject = true; } else if (ModelUtils.isArraySchema(p)) { // default to string if inner item is undefined - Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(p)); - if (p instanceof ArraySchema && ((ArraySchema) p).getItems() == null) { - ((ArraySchema) p).setItems(innerSchema); + ArraySchema arraySchema = (ArraySchema) p; + Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(arraySchema)); + if (arraySchema.getItems() == null) { + arraySchema.setItems(innerSchema); } } else if (ModelUtils.isMapSchema(p)) { Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, ModelUtils.getAdditionalProperties(p)); @@ -2270,9 +2270,10 @@ public class DefaultCodegen implements CodegenConfig { if (itemName == null) { itemName = property.name; } - Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(p)); - if (p instanceof ArraySchema && ((ArraySchema) p).getItems() == null) { - ((ArraySchema) p).setItems(innerSchema); + ArraySchema arraySchema = (ArraySchema) p; + Schema innerSchema = ModelUtils.unaliasSchema(this.openAPI, getSchemaItems(arraySchema)); + if (arraySchema.getItems() == null) { + arraySchema.setItems(innerSchema); } CodegenProperty cp = fromProperty(itemName, innerSchema); updatePropertyForArray(property, cp); @@ -2589,7 +2590,8 @@ public class DefaultCodegen implements CodegenConfig { CodegenProperty cm = fromProperty("response", responseSchema); if (ModelUtils.isArraySchema(responseSchema)) { - CodegenProperty innerProperty = fromProperty("response", getSchemaItems(responseSchema)); + ArraySchema as = (ArraySchema) responseSchema; + CodegenProperty innerProperty = fromProperty("response", getSchemaItems(as)); op.returnBaseType = innerProperty.baseType; } else if (ModelUtils.isMapSchema(responseSchema)) { CodegenProperty innerProperty = fromProperty("response", ModelUtils.getAdditionalProperties(responseSchema)); @@ -2858,7 +2860,8 @@ public class DefaultCodegen implements CodegenConfig { CodegenProperty cp = fromProperty("response", responseSchema); if (ModelUtils.isArraySchema(responseSchema)) { - CodegenProperty innerProperty = fromProperty("response", getSchemaItems(responseSchema)); + ArraySchema as = (ArraySchema) responseSchema; + CodegenProperty innerProperty = fromProperty("response", getSchemaItems(as)); CodegenProperty innerCp = innerProperty; while (innerCp != null) { r.baseType = innerCp.baseType; @@ -3065,9 +3068,10 @@ public class DefaultCodegen implements CodegenConfig { // TDOO revise collectionFormat String collectionFormat = null; if (ModelUtils.isArraySchema(parameterSchema)) { // for array parameter - Schema inner = getSchemaItems(parameterSchema); - if (parameterSchema instanceof ArraySchema && ((ArraySchema) parameterSchema).getItems() == null) { - ((ArraySchema) parameterSchema).setItems(inner); + final ArraySchema arraySchema = (ArraySchema) parameterSchema; + Schema inner = getSchemaItems(arraySchema); + if (arraySchema.getItems() == null) { + arraySchema.setItems(inner); } collectionFormat = getCollectionFormat(parameter); @@ -4598,9 +4602,10 @@ public class DefaultCodegen implements CodegenConfig { Schema s = entry.getValue(); // array of schema if (ModelUtils.isArraySchema(s)) { - Schema inner = getSchemaItems(s); - if (s instanceof ArraySchema && ((ArraySchema) s).getItems() == null) { - ((ArraySchema) s).setItems(inner); + final ArraySchema arraySchema = (ArraySchema) s; + Schema inner = getSchemaItems(arraySchema); + if (arraySchema.getItems() == null) { + arraySchema.setItems(inner); } codegenParameter = fromFormProperty(entry.getKey(), inner, imports); @@ -4612,7 +4617,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.isContainer = true; codegenParameter.isListContainer = true; codegenParameter.description = escapeText(s.getDescription()); - codegenParameter.dataType = getTypeDeclaration(s); + codegenParameter.dataType = getTypeDeclaration(arraySchema); if (codegenParameter.baseType != null && codegenParameter.enumName != null) { codegenParameter.datatypeWithEnum = codegenParameter.dataType.replace(codegenParameter.baseType, codegenParameter.enumName); } else { @@ -4795,12 +4800,12 @@ public class DefaultCodegen implements CodegenConfig { // set nullable setParameterNullable(codegenParameter, codegenProperty); } else if (ModelUtils.isArraySchema(schema)) { - Schema inner = getSchemaItems(schema); - if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() == null) { - ((ArraySchema) schema).setItems(inner); + final ArraySchema arraySchema = (ArraySchema) schema; + Schema inner = getSchemaItems(arraySchema); + if (arraySchema.getItems() == null) { + arraySchema.setItems(inner); } - - CodegenProperty codegenProperty = fromProperty("property", schema); + CodegenProperty codegenProperty = fromProperty("property", arraySchema); imports.add(codegenProperty.baseType); CodegenProperty innerCp = codegenProperty; CodegenProperty mostInnerItem = innerCp; @@ -4826,7 +4831,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.paramName = toArrayModelParamName(codegenParameter.baseName); codegenParameter.items = codegenProperty.items; codegenParameter.mostInnerItems = codegenProperty.mostInnerItems; - codegenParameter.dataType = getTypeDeclaration(schema); + codegenParameter.dataType = getTypeDeclaration(arraySchema); codegenParameter.baseType = getSchemaType(inner); codegenParameter.isContainer = Boolean.TRUE; codegenParameter.isListContainer = Boolean.TRUE; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java index 6393286ee22..5ce8089d198 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/examples/ExampleGenerator.java @@ -79,13 +79,13 @@ public class ExampleGenerator { } if (ModelUtils.isArraySchema(responseSchema)) { // array of schema - Schema<?> items = (responseSchema instanceof ArraySchema) ? ((ArraySchema) responseSchema).getItems() : null; - if (items != null && StringUtils.isEmpty(items.get$ref())) { // arary of primtive types + ArraySchema as = (ArraySchema) responseSchema; + if (as.getItems() != null && StringUtils.isEmpty(as.getItems().get$ref())) { // arary of primtive types return generate((Map<String, Object>) responseSchema.getExample(), - new ArrayList<String>(producesInfo), items); - } else if (items != null && !StringUtils.isEmpty(items.get$ref())) { // array of model + new ArrayList<String>(producesInfo), as.getItems()); + } else if (as.getItems() != null && !StringUtils.isEmpty(as.getItems().get$ref())) { // array of model return generate((Map<String, Object>) responseSchema.getExample(), - new ArrayList<String>(producesInfo), ModelUtils.getSimpleRef(items.get$ref())); + new ArrayList<String>(producesInfo), ModelUtils.getSimpleRef(as.getItems().get$ref())); } else { // TODO log warning message as such case is not handled at the moment return null; @@ -229,9 +229,9 @@ public class ExampleGenerator { } return Boolean.TRUE; } else if (ModelUtils.isArraySchema(property)) { - Schema<?> innerType = (property instanceof ArraySchema) ? ((ArraySchema) property).getItems() : null; + Schema innerType = ((ArraySchema) property).getItems(); if (innerType != null) { - int arrayLength = null == property.getMaxItems() ? 2 : property.getMaxItems(); + int arrayLength = null == ((ArraySchema) property).getMaxItems() ? 2 : ((ArraySchema) property).getMaxItems(); // avoid memory issues by limiting to max. 5 items arrayLength = Math.min(arrayLength, 5); Object[] objectProperties = new Object[arrayLength]; 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 18507859246..f04d4ac1379 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 @@ -686,7 +686,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code @Override public String getTypeDeclaration(Schema p) { if (ModelUtils.isArraySchema(p)) { - Schema<?> items = getSchemaItems(p); + Schema<?> items = getSchemaItems((ArraySchema) p); return getSchemaType(p) + "<" + getTypeDeclaration(items) + ">"; } else if (ModelUtils.isMapSchema(p)) { Schema inner = ModelUtils.getAdditionalProperties(p); @@ -719,7 +719,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code pattern = "new ArrayList<%s>()"; } - Schema<?> items = getSchemaItems(p); + Schema<?> items = getSchemaItems((ArraySchema) p); String typeDeclaration = getTypeDeclaration(items); Object java8obj = additionalProperties.get("java8"); 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 50c9250224b..d9cc61cbc03 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 @@ -359,14 +359,7 @@ public class ModelUtils { } public static boolean isArraySchema(Schema schema) { - if (schema instanceof ArraySchema) { - return true; - } - // assume it's an array if maxItems, minItems is set - if (schema != null && (schema.getMaxItems() != null || schema.getMinItems() != null)) { - return true; - } - return false; + return (schema instanceof ArraySchema); } public static boolean isStringSchema(Schema schema) { 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 e8de94dc5fc..77fb953bb34 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 @@ -312,7 +312,7 @@ public class AbstractJavaCodegenTest { Schema<?> schema = createObjectSchemaWithMinItems(); String defaultValue = codegen.toDefaultValue(schema); - Assert.assertEquals(defaultValue, "new ArrayList<String>()"); + Assert.assertNull(defaultValue); } @Test @@ -321,7 +321,7 @@ public class AbstractJavaCodegenTest { Schema<?> schema = createObjectSchemaWithMinItems(); String defaultValue = codegen.getTypeDeclaration(schema); - Assert.assertEquals(defaultValue, "List<String>"); + Assert.assertEquals(defaultValue, "Object"); } private static Schema<?> createObjectSchemaWithMinItems() { -- GitLab