From 73bfa6efb2cd9594c657ec6bd880529bc304e76f Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 14:52:08 +0200 Subject: [PATCH 1/9] Allow colons in interface property names: https://github.com/OpenAPITools/openapi-generator/issues/1080 --- .../openapitools/codegen/DefaultCodegen.java | 13 +++++++++++- .../AbstractTypeScriptClientCodegen.java | 21 +++++++++++++++++++ .../typescript-angular/modelGeneric.mustache | 2 +- 3 files changed, 34 insertions(+), 2 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 8ddbb41197b3..0dc3caa55762 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 @@ -787,6 +787,17 @@ public String toVarName(String name) { } } + /** + * Return the variable name by removing invalid characters and proper escaping if + * it's a reserved word. + * + * @param name the property name + * @return the sanitized property name + */ + public String toPropertyName(String name) { + return toVarName(name); + } + /** * Return the parameter name by removing invalid characters and proper escaping if * it's a reserved word. @@ -1762,7 +1773,7 @@ public CodegenProperty fromProperty(String name, Schema p) { } LOGGER.debug("debugging fromProperty for " + name + " : " + p); CodegenProperty property = CodegenModelFactory.newInstance(CodegenModelType.PROPERTY); - property.name = toVarName(name); + property.name = toPropertyName(name); property.baseName = name; property.nameInCamelCase = org.openapitools.codegen.utils.StringUtils.camelize(property.name, false); property.nameInSnakeCase = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, property.nameInCamelCase); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 2755301b909c..9e346d9e1829 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -29,6 +29,8 @@ import java.io.File; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen implements CodegenConfig { @@ -184,6 +186,25 @@ public String toVarName(String name) { return name; } + @Override() + public String toPropertyName(String name) { + name = toVarName(name); + + if (hasIllegalCharacters(name)) { + name = "\'" + name + "\'"; + } + + return name; + } + + private boolean hasIllegalCharacters(String name) { + final String regex = "^.*[+*:;,.()]+.*$"; + final Pattern pattern = Pattern.compile(regex); + final Matcher matcher = pattern.matcher(name); + boolean matches = matcher.matches(); + return matches; + } + @Override public String toModelName(String name) { name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache index c9da208072e3..9ec6e67dde91 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache @@ -5,6 +5,6 @@ export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{ {{>m * {{{description}}} */ {{/description}} - {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}; + {{#isReadOnly}}readonly {{/isReadOnly}}{{{name}}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}; {{/vars}} }{{>modelGenericEnums}} \ No newline at end of file From 37e6750481a9d1c43d0fbd0281043a3df3cba1fc Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 15:44:58 +0200 Subject: [PATCH 2/9] replace tabs with spaces --- .../codegen/languages/AbstractTypeScriptClientCodegen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 9e346d9e1829..1bd24335a9fa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -197,8 +197,8 @@ public String toPropertyName(String name) { return name; } - private boolean hasIllegalCharacters(String name) { - final String regex = "^.*[+*:;,.()]+.*$"; + private boolean hasIllegalCharacters(String name) { + final String regex = "^.*[+*:;,.()]+.*$"; final Pattern pattern = Pattern.compile(regex); final Matcher matcher = pattern.matcher(name); boolean matches = matcher.matches(); From fcab6d0a03a232c6529f485be17f05c49670c572 Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 16:10:12 +0200 Subject: [PATCH 3/9] add docs --- .../languages/AbstractTypeScriptClientCodegen.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 1bd24335a9fa..2e5620fbfeec 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -190,6 +190,8 @@ public String toVarName(String name) { public String toPropertyName(String name) { name = toVarName(name); + // if the proprty name has any illegal characters such as :, ;, . etc. + // then wrap the name within single quotes. if (hasIllegalCharacters(name)) { name = "\'" + name + "\'"; } @@ -197,10 +199,15 @@ public String toPropertyName(String name) { return name; } - private boolean hasIllegalCharacters(String name) { + /** + * Checks whether illegal characters are present in the given param + * @param str string to check for illegal characters + * @return true if illegal characters are present and false if not + */ + private boolean hasIllegalCharacters(String str) { final String regex = "^.*[+*:;,.()]+.*$"; final Pattern pattern = Pattern.compile(regex); - final Matcher matcher = pattern.matcher(name); + final Matcher matcher = pattern.matcher(str); boolean matches = matcher.matches(); return matches; } From 47ade7abe0af61013e175666fec7eac08bf2eb81 Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 16:14:07 +0200 Subject: [PATCH 4/9] add example in doc --- .../codegen/languages/AbstractTypeScriptClientCodegen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 2e5620fbfeec..22f0651cb20c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -192,6 +192,7 @@ public String toPropertyName(String name) { // if the proprty name has any illegal characters such as :, ;, . etc. // then wrap the name within single quotes. + // my:interface:property: string; => 'my:interface:property': string; if (hasIllegalCharacters(name)) { name = "\'" + name + "\'"; } From 61a0195619ca20cd1e4190f934e286c25b4cd500 Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 16:30:04 +0200 Subject: [PATCH 5/9] update docs --- .../languages/AbstractTypeScriptClientCodegen.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index 22f0651cb20c..b38b5423886b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -190,10 +190,10 @@ public String toVarName(String name) { public String toPropertyName(String name) { name = toVarName(name); - // if the proprty name has any illegal characters such as :, ;, . etc. + // if the proprty name has any breaking characters such as :, ;, . etc. // then wrap the name within single quotes. // my:interface:property: string; => 'my:interface:property': string; - if (hasIllegalCharacters(name)) { + if (propertyHasBreakingCharacters(name)) { name = "\'" + name + "\'"; } @@ -201,12 +201,12 @@ public String toPropertyName(String name) { } /** - * Checks whether illegal characters are present in the given param - * @param str string to check for illegal characters - * @return true if illegal characters are present and false if not + * Checks whether property names have breaking characters like ':', '-'. + * @param str string to check for breaking characters + * @return true if breaking characters are present and false if not */ - private boolean hasIllegalCharacters(String str) { - final String regex = "^.*[+*:;,.()]+.*$"; + private boolean propertyHasBreakingCharacters(String str) { + final String regex = "^.*[+*:;,.()-]+.*$"; final Pattern pattern = Pattern.compile(regex); final Matcher matcher = pattern.matcher(str); boolean matches = matcher.matches(); From 0ccbcd81e086983c31824b0648502f6c1cbaa654 Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Mon, 1 Oct 2018 16:45:08 +0200 Subject: [PATCH 6/9] update docs --- .../main/java/org/openapitools/codegen/DefaultCodegen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 0dc3caa55762..dbc1788a68b1 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 @@ -788,8 +788,8 @@ public String toVarName(String name) { } /** - * Return the variable name by removing invalid characters and proper escaping if - * it's a reserved word. + * Return the property name by removing invalid characters and proper escaping if + * it's a reserved word or a name with breaking characters. * * @param name the property name * @return the sanitized property name From 54b07c9425c338b9ef986bd5ac13c1e742c36d72 Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Tue, 2 Oct 2018 09:06:20 +0200 Subject: [PATCH 7/9] remove language specific docs in DefaultCodegen --- .../src/main/java/org/openapitools/codegen/DefaultCodegen.java | 2 +- samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv 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 dbc1788a68b1..ca859c18eca4 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 @@ -789,7 +789,7 @@ public String toVarName(String name) { /** * Return the property name by removing invalid characters and proper escaping if - * it's a reserved word or a name with breaking characters. + * it's a reserved word. * * @param name the property name * @return the sanitized property name diff --git a/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv b/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv new file mode 100644 index 000000000000..9c23144ca977 --- /dev/null +++ b/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv @@ -0,0 +1 @@ +photoUrls,name,id,category,tags,status \ No newline at end of file From 83e0b629cd8679b8b8195dd3ea0af02cfb7b1e4f Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Tue, 2 Oct 2018 09:20:20 +0200 Subject: [PATCH 8/9] Delete addPet-BodyParams.csv --- samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv | 1 - 1 file changed, 1 deletion(-) delete mode 100644 samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv diff --git a/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv b/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv deleted file mode 100644 index 9c23144ca977..000000000000 --- a/samples/client/petstore/scala-gatling/bin/addPet-BodyParams.csv +++ /dev/null @@ -1 +0,0 @@ -photoUrls,name,id,category,tags,status \ No newline at end of file From 84eaf206a37b9ff36108eb35e10cfddd818e850c Mon Sep 17 00:00:00 2001 From: Steven Masala Date: Tue, 2 Oct 2018 15:38:34 +0200 Subject: [PATCH 9/9] remove toPropertyName and update toVarName instead for TS --- .../org/openapitools/codegen/DefaultCodegen.java | 13 +------------ .../languages/AbstractTypeScriptClientCodegen.java | 12 +++--------- 2 files changed, 4 insertions(+), 21 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 ca859c18eca4..8ddbb41197b3 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 @@ -787,17 +787,6 @@ public String toVarName(String name) { } } - /** - * Return the property name by removing invalid characters and proper escaping if - * it's a reserved word. - * - * @param name the property name - * @return the sanitized property name - */ - public String toPropertyName(String name) { - return toVarName(name); - } - /** * Return the parameter name by removing invalid characters and proper escaping if * it's a reserved word. @@ -1773,7 +1762,7 @@ public CodegenProperty fromProperty(String name, Schema p) { } LOGGER.debug("debugging fromProperty for " + name + " : " + p); CodegenProperty property = CodegenModelFactory.newInstance(CodegenModelType.PROPERTY); - property.name = toPropertyName(name); + property.name = toVarName(name); property.baseName = name; property.nameInCamelCase = org.openapitools.codegen.utils.StringUtils.camelize(property.name, false); property.nameInSnakeCase = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, property.nameInCamelCase); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java index b38b5423886b..3023e83afcf1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java @@ -158,12 +158,6 @@ public String modelFileFolder() { @Override public String toParamName(String name) { - // should be the same as variable name - return toVarName(name); - } - - @Override - public String toVarName(String name) { // sanitize name name = sanitizeName(name, "\\W-[\\$]"); @@ -186,9 +180,9 @@ public String toVarName(String name) { return name; } - @Override() - public String toPropertyName(String name) { - name = toVarName(name); + @Override + public String toVarName(String name) { + name = this.toParamName(name); // if the proprty name has any breaking characters such as :, ;, . etc. // then wrap the name within single quotes.