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