forked from loafle/openapi-generator-original
Fixes Kotlin client property names that include a dollar sign (#4229)
Property names that include a dollar sign are being interpreted by Kotlin as a string template. This fix escapes such instances. https://github.com/OpenAPITools/openapi-generator/issues/4228
This commit is contained in:
parent
620aa4fd5e
commit
b56a9d907c
@ -19,7 +19,9 @@ package org.openapitools.codegen.languages;
|
|||||||
|
|
||||||
import org.openapitools.codegen.CliOption;
|
import org.openapitools.codegen.CliOption;
|
||||||
import org.openapitools.codegen.CodegenConstants;
|
import org.openapitools.codegen.CodegenConstants;
|
||||||
|
import org.openapitools.codegen.CodegenModel;
|
||||||
import org.openapitools.codegen.CodegenOperation;
|
import org.openapitools.codegen.CodegenOperation;
|
||||||
|
import org.openapitools.codegen.CodegenProperty;
|
||||||
import org.openapitools.codegen.CodegenType;
|
import org.openapitools.codegen.CodegenType;
|
||||||
import org.openapitools.codegen.SupportingFile;
|
import org.openapitools.codegen.SupportingFile;
|
||||||
|
|
||||||
@ -38,6 +40,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
|
|||||||
public static final String DATE_LIBRARY = "dateLibrary";
|
public static final String DATE_LIBRARY = "dateLibrary";
|
||||||
public static final String COLLECTION_TYPE = "collectionType";
|
public static final String COLLECTION_TYPE = "collectionType";
|
||||||
|
|
||||||
|
protected static final String VENDOR_EXTENSION_BASE_NAME_LITERAL = "x-base-name-literal";
|
||||||
|
|
||||||
protected String dateLibrary = DateLibrary.JAVA8.value;
|
protected String dateLibrary = DateLibrary.JAVA8.value;
|
||||||
protected String collectionType = CollectionType.ARRAY.value;
|
protected String collectionType = CollectionType.ARRAY.value;
|
||||||
|
|
||||||
@ -253,6 +257,31 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
|
|||||||
return getLibrary() != null && (getLibrary().contains(JVM_OKHTTP4) || getLibrary().contains(JVM_OKHTTP3));
|
return getLibrary() != null && (getLibrary().contains(JVM_OKHTTP4) || getLibrary().contains(JVM_OKHTTP3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> postProcessModels(Map<String, Object> objs) {
|
||||||
|
Map<String, Object> objects = super.postProcessModels(objs);
|
||||||
|
@SuppressWarnings("unchecked") List<Object> models = (List<Object>) objs.get("models");
|
||||||
|
|
||||||
|
for (Object model : models) {
|
||||||
|
@SuppressWarnings("unchecked") Map<String, Object> mo = (Map<String, Object>) model;
|
||||||
|
CodegenModel cm = (CodegenModel) mo.get("model");
|
||||||
|
|
||||||
|
// escape the variable base name for use as a string literal
|
||||||
|
if (cm.requiredVars != null) {
|
||||||
|
for (CodegenProperty var : cm.requiredVars) {
|
||||||
|
var.vendorExtensions.put(VENDOR_EXTENSION_BASE_NAME_LITERAL, var.baseName.replace("$", "\\$"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cm.optionalVars != null) {
|
||||||
|
for (CodegenProperty var : cm.optionalVars) {
|
||||||
|
var.vendorExtensions.put(VENDOR_EXTENSION_BASE_NAME_LITERAL, var.baseName.replace("$", "\\$"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return objects;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) {
|
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) {
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
{{/description}}
|
{{/description}}
|
||||||
{{#jvm}}
|
{{#jvm}}
|
||||||
{{#moshi}}
|
{{#moshi}}
|
||||||
@Json(name = "{{{baseName}}}")
|
@Json(name = "{{{vendorExtensions.x-base-name-literal}}}")
|
||||||
{{/moshi}}
|
{{/moshi}}
|
||||||
{{#gson}}
|
{{#gson}}
|
||||||
@SerializedName("{{name}}")
|
@SerializedName("{{{vendorExtensions.x-base-name-literal}}}")
|
||||||
{{/gson}}
|
{{/gson}}
|
||||||
{{/jvm}}
|
{{/jvm}}
|
||||||
{{#multiplatform}}@SerialName(value = "{{baseName}}") {{/multiplatform}}val {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}}
|
{{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") {{/multiplatform}}val {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}}
|
@ -3,10 +3,10 @@
|
|||||||
{{/description}}
|
{{/description}}
|
||||||
{{#jvm}}
|
{{#jvm}}
|
||||||
{{#moshi}}
|
{{#moshi}}
|
||||||
@Json(name = "{{{baseName}}}")
|
@Json(name = "{{{vendorExtensions.x-base-name-literal}}}")
|
||||||
{{/moshi}}
|
{{/moshi}}
|
||||||
{{#gson}}
|
{{#gson}}
|
||||||
@SerializedName("{{name}}")
|
@SerializedName("{{{vendorExtensions.x-base-name-literal}}}")
|
||||||
{{/gson}}
|
{{/gson}}
|
||||||
{{/jvm}}
|
{{/jvm}}
|
||||||
{{#multiplatform}}@SerialName(value = "{{baseName}}") @Required {{/multiplatform}}val {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}
|
{{#multiplatform}}@SerialName(value = "{{{vendorExtensions.x-base-name-literal}}}") @Required {{/multiplatform}}val {{{name}}}: {{#isEnum}}{{#isListContainer}}{{#isList}}kotlin.collections.List{{/isList}}{{^isList}}kotlin.Array{{/isList}}<{{classname}}.{{{nameInCamelCase}}}>{{/isListContainer}}{{^isListContainer}}{{classname}}.{{{nameInCamelCase}}}{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}
|
Loading…
x
Reference in New Issue
Block a user