From e4e29c0974603df4a8ba52d26495d99a807b9ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Radics?= <mitchnull@gmail.com> Date: Fri, 10 Jan 2020 10:27:16 +0100 Subject: [PATCH 1/2] [issue-4961] add parentContainer property to CodegenModel --- .../main/java/org/openapitools/codegen/CodegenModel.java | 1 + .../main/java/org/openapitools/codegen/DefaultCodegen.java | 6 +++--- 2 files changed, 4 insertions(+), 3 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 f8eb675d477..1fb0ec76163 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 @@ -61,6 +61,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { public Set<String> imports = new TreeSet<String>(); public boolean hasVars, emptyVars, hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArrayModel, hasChildren, isMapModel; + public CodegenProperty parentContainer; public boolean hasOnlyReadOnly = true; // true if all properties are read-only public ExternalDocumentation externalDocumentation; 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 df595d68f08..adb0682ac36 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 @@ -3776,10 +3776,10 @@ public class DefaultCodegen implements CodegenConfig { } protected void addParentContainer(CodegenModel model, String name, Schema schema) { - final CodegenProperty property = fromProperty(name, schema); - addImport(model, property.complexType); + model.parentContainer = fromProperty(name, schema); + addImport(model, model.parentContainer.complexType); model.parent = toInstantiationType(schema); - final String containerType = property.containerType; + final String containerType = model.parentContainer.containerType; final String instantiationType = instantiationTypes.get(containerType); if (instantiationType != null) { addImport(model, instantiationType); -- GitLab From 6b7f2390d9e5b53844db19336a97e1f327ceb281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Radics?= <mitchnull@gmail.com> Date: Fri, 10 Jan 2020 10:37:57 +0100 Subject: [PATCH 2/2] [issue-4961] add "itemsDepth" property for nested properties This allows variable-name generation for nested structures without shadowing violations, like v${{itemsDepth}}. --- .../org/openapitools/codegen/CodegenProperty.java | 1 + .../java/org/openapitools/codegen/DefaultCodegen.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java index e9877eefafa..a93a8c19739 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java @@ -86,6 +86,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti public List<String> _enum; public Map<String, Object> allowableValues; public CodegenProperty items; + public Integer itemsDepth; public CodegenProperty mostInnerItems; public Map<String, Object> vendorExtensions = new HashMap<String, Object>(); public boolean hasValidation; // true if pattern, maximum, etc are set (only used in the mustache template) 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 adb0682ac36..83c0da6343e 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 @@ -2162,6 +2162,10 @@ public class DefaultCodegen implements CodegenConfig { * @return Codegen Property object */ public CodegenProperty fromProperty(String name, Schema p) { + return fromProperty(name, p, null); + } + + private CodegenProperty fromProperty(String name, Schema p, Integer itemsDepth) { if (p == null) { LOGGER.error("Undefined property/schema for `{}`. Default to type:string.", name); return null; @@ -2175,6 +2179,7 @@ public class DefaultCodegen implements CodegenConfig { ModelUtils.syncValidationProperties(p, property); + property.itemsDepth = itemsDepth; property.name = toVarName(name); property.baseName = name; if (p.getType() == null) { @@ -2401,7 +2406,8 @@ public class DefaultCodegen implements CodegenConfig { if (arraySchema.getItems() == null) { arraySchema.setItems(innerSchema); } - CodegenProperty cp = fromProperty(itemName, innerSchema); + CodegenProperty cp = fromProperty(itemName, innerSchema, + itemsDepth == null ? 1 : itemsDepth.intValue() + 1); updatePropertyForArray(property, cp); } else if (ModelUtils.isMapSchema(p)) { property.isContainer = true; @@ -2418,7 +2424,8 @@ public class DefaultCodegen implements CodegenConfig { innerSchema = new StringSchema().description("//TODO automatically added by openapi-generator due to undefined type"); p.setAdditionalProperties(innerSchema); } - CodegenProperty cp = fromProperty("inner", innerSchema); + CodegenProperty cp = fromProperty("inner", innerSchema, + itemsDepth == null ? 1 : itemsDepth.intValue() + 1); updatePropertyForMap(property, cp); } else if (ModelUtils.isFreeFormObject(p)) { property.isFreeFormObject = true; -- GitLab