From 1d4fdf9d08028b9603d7cd768822ced09fd969d7 Mon Sep 17 00:00:00 2001 From: Sigrid Andersson Date: Tue, 29 Jun 2021 22:58:37 +0200 Subject: [PATCH 1/3] Properly escape default values --- .../src/main/resources/kotlin-spring/dataClassOptVar.mustache | 2 +- .../src/main/resources/kotlin-spring/dataClassReqVar.mustache | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassOptVar.mustache b/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassOptVar.mustache index 0fca42a0ad8c..81badfd31326 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassOptVar.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassOptVar.mustache @@ -1,4 +1,4 @@ {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}{{#swaggerAnnotations}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#isReadOnly}}readOnly = {{{isReadOnly}}}, {{/isReadOnly}}value = "{{{description}}}"){{/swaggerAnnotations}}{{#deprecated}} @Deprecated(message = ""){{/deprecated}} - @field:JsonProperty("{{{baseName}}}"){{#isInherited}} override{{/isInherited}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isArray}}{{baseType}}<{{/isArray}}{{classname}}.{{nameInCamelCase}}{{#isArray}}>{{/isArray}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultValue}}{{defaultValue}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}} \ No newline at end of file + @field:JsonProperty("{{{baseName}}}"){{#isInherited}} override{{/isInherited}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isArray}}{{baseType}}<{{/isArray}}{{classname}}.{{nameInCamelCase}}{{#isArray}}>{{/isArray}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassReqVar.mustache b/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassReqVar.mustache index 27e16f95fca0..9e2cddf2d254 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassReqVar.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-spring/dataClassReqVar.mustache @@ -1,3 +1,3 @@ {{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}{{#swaggerAnnotations}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}required = true, {{#isReadOnly}}readOnly = {{{isReadOnly}}}, {{/isReadOnly}}value = "{{{description}}}"){{/swaggerAnnotations}} - @field:JsonProperty("{{{baseName}}}", required = true){{#isInherited}} override{{/isInherited}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isArray}}{{baseType}}<{{/isArray}}{{classname}}.{{nameInCamelCase}}{{#isArray}}>{{/isArray}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isReadOnly}}?{{/isReadOnly}}{{#defaultValue}} = {{defaultValue}}{{/defaultValue}}{{#isReadOnly}}{{^defaultValue}} = null{{/defaultValue}}{{/isReadOnly}} \ No newline at end of file + @field:JsonProperty("{{{baseName}}}", required = true){{#isInherited}} override{{/isInherited}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{#isArray}}{{baseType}}<{{/isArray}}{{classname}}.{{nameInCamelCase}}{{#isArray}}>{{/isArray}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isReadOnly}}?{{/isReadOnly}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#isReadOnly}}{{^defaultValue}} = null{{/defaultValue}}{{/isReadOnly}} \ No newline at end of file From 558eda5de68d895b661675974d219501008a83c6 Mon Sep 17 00:00:00 2001 From: Sigrid Andersson Date: Tue, 29 Jun 2021 22:59:10 +0200 Subject: [PATCH 2/3] Support default values for array types --- .../languages/AbstractKotlinCodegen.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java index c681aaf51cb9..04e2bdacf0ab 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java @@ -17,6 +17,7 @@ package org.openapitools.codegen.languages; +import com.fasterxml.jackson.databind.node.ArrayNode; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; @@ -924,6 +925,26 @@ public String toDefaultValue(Schema schema) { if (p.getDefault() != null) { return "URI.create('" + p.getDefault() + "')"; } + } else if (ModelUtils.isArraySchema(p)) { + if (p.getDefault() != null) { + String arrInstantiationType = ModelUtils.isSet(p) + ? instantiationTypes().getOrDefault("set", "Set") + : instantiationTypes().getOrDefault("list", "ArrayList"); + + ArrayNode _default = (ArrayNode) p.getDefault(); + if (_default.isEmpty()) { + return arrInstantiationType + ".of()"; + } + + StringBuilder defaultContent = new StringBuilder(); + Schema itemsSchema = getSchemaItems((ArraySchema) schema); + _default.elements().forEachRemaining((element) -> { + itemsSchema.setDefault(element.asText()); + defaultContent.append(toDefaultValue(itemsSchema)).append(","); + }); + defaultContent.deleteCharAt(defaultContent.length()-1); // remove trailing comma + return arrInstantiationType + ".of(" + defaultContent + ")"; + } } else if (ModelUtils.isStringSchema(p)) { if (p.getDefault() != null) { String _default = (String) p.getDefault(); From 8b22e13b487218908304740d40d673852d8aaed3 Mon Sep 17 00:00:00 2001 From: Sigrid Andersson Date: Wed, 30 Jun 2021 18:11:08 +0200 Subject: [PATCH 3/3] Use Kotlin initializers, not Java --- .../codegen/languages/AbstractKotlinCodegen.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java index 04e2bdacf0ab..70f04f0baf72 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java @@ -927,13 +927,11 @@ public String toDefaultValue(Schema schema) { } } else if (ModelUtils.isArraySchema(p)) { if (p.getDefault() != null) { - String arrInstantiationType = ModelUtils.isSet(p) - ? instantiationTypes().getOrDefault("set", "Set") - : instantiationTypes().getOrDefault("list", "ArrayList"); + String arrInstantiationType = ModelUtils.isSet(p) ? "set" : "arrayList"; ArrayNode _default = (ArrayNode) p.getDefault(); if (_default.isEmpty()) { - return arrInstantiationType + ".of()"; + return arrInstantiationType + "Of()"; } StringBuilder defaultContent = new StringBuilder(); @@ -943,7 +941,7 @@ public String toDefaultValue(Schema schema) { defaultContent.append(toDefaultValue(itemsSchema)).append(","); }); defaultContent.deleteCharAt(defaultContent.length()-1); // remove trailing comma - return arrInstantiationType + ".of(" + defaultContent + ")"; + return arrInstantiationType + "Of(" + defaultContent + ")"; } } else if (ModelUtils.isStringSchema(p)) { if (p.getDefault() != null) {