From 24f20941e5d1627c56ee3b5d69d08b45f85568af Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 2 Mar 2019 21:48:00 +0800 Subject: [PATCH] fix npe when array item missing (#2247) --- .../org/openapitools/codegen/CodegenModel.java | 14 +++++++++----- .../org/openapitools/codegen/DefaultCodegen.java | 8 +++++++- .../org/openapitools/codegen/utils/ModelUtils.java | 9 ++++++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java index 7480ef94b00..987fe692606 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java @@ -621,11 +621,15 @@ public class CodegenModel { */ public void removeSelfReferenceImport() { for (CodegenProperty cp : allVars) { - // detect self import - if (cp.dataType.equalsIgnoreCase(this.classname) || - (cp.isContainer && cp.items.dataType.equalsIgnoreCase(this.classname))) { - this.imports.remove(this.classname); // remove self import - cp.isSelfReference = true; + if (cp == null) { + // TODO cp shouldn't be null. Show a warning message instead + } else { + // detect self import + if (this.classname.equalsIgnoreCase(cp.dataType) || + (cp.isContainer && cp.items != null && this.classname.equalsIgnoreCase(cp.items.dataType))) { + this.imports.remove(this.classname); // remove self import + cp.isSelfReference = true; + } } } } 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 e41d05e48f4..b4142f360fd 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 @@ -257,7 +257,7 @@ public class DefaultCodegen implements CodegenConfig { for (CodegenProperty cp : cm.allVars) { // detect self import if (cp.dataType.equalsIgnoreCase(cm.classname) || - (cp.isContainer && cp.items.dataType.equalsIgnoreCase(cm.classname))) { + (cp.isContainer && cp.items != null && cp.items.dataType.equalsIgnoreCase(cm.classname))) { cm.imports.remove(cm.classname); // remove self import cp.isSelfReference = true; } @@ -1507,10 +1507,16 @@ public class DefaultCodegen implements CodegenConfig { * @return a string presentation of the property type */ public String getTypeDeclaration(Schema schema) { + if (schema == null) { + LOGGER.warn("Null schema found. Default type to `NULL_SCHMEA_ERR`"); + return "NULL_SCHMEA_ERR"; + } + String oasType = getSchemaType(schema); if (typeMapping.containsKey(oasType)) { return typeMapping.get(oasType); } + return oasType; } 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 8dedaa88c93..ce5a190af49 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 @@ -329,12 +329,19 @@ public class ModelUtils { if (schema instanceof MapSchema) { return true; } + + if (schema == null) { + return false; + } + if (schema.getAdditionalProperties() instanceof Schema) { return true; } + if (schema.getAdditionalProperties() instanceof Boolean && (Boolean) schema.getAdditionalProperties()) { return true; } + return false; } @@ -343,7 +350,7 @@ public class ModelUtils { return true; } // assume it's an array if maxItems, minItems is set - if (schema.getMaxItems() != null || schema.getMinItems() != null) { + if (schema != null && (schema.getMaxItems() != null || schema.getMinItems() != null)) { return true; } return false;