From da009c330725afc62421241e5f3d7f9dc7613188 Mon Sep 17 00:00:00 2001 From: Vincent Devos <vct.devos@gmail.com> Date: Fri, 8 Feb 2019 13:35:49 +0100 Subject: [PATCH] [Java] Getter/Setter naming convention not followed in generated models fix the getter/setter when the second letter of the field name is already uppercase (following the JavaBeans API specification) --- .../openapitools/codegen/DefaultCodegen.java | 2 +- .../languages/AbstractJavaCodegen.java | 30 ++++++++++++++++ .../codegen/java/JavaModelTest.java | 34 +++++++++++++++++-- 3 files changed, 62 insertions(+), 4 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 5422042499c..504f76d624a 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 @@ -1551,7 +1551,7 @@ public class DefaultCodegen implements CodegenConfig { } /** - * Output the Getter name, e.g. getSize + * Output the Setter name, e.g. setSize * * @param name the name of the property * @return setter name based on naming convention diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 76e57413aad..8013d9bf0f7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -1349,10 +1349,12 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code this.supportJava6 = value; } + @Override public String toRegularExpression(String pattern) { return escapeText(pattern); } + @Override public boolean convertPropertyToBoolean(String propertyKey) { boolean booleanValue = false; if (additionalProperties.containsKey(propertyKey)) { @@ -1362,6 +1364,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code return booleanValue; } + @Override public void writePropertyBack(String propertyKey, boolean value) { additionalProperties.put(propertyKey, value); } @@ -1387,6 +1390,33 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code return tag; } + /** + * Camelize the method name of the getter and setter + * + * @param name string to be camelized + * @return Camelized string + */ + @Override + public String getterAndSetterCapitalize(String name) { + boolean lowercaseFirstLetter = false; + if (name == null || name.length() == 0) { + return name; + } + name = toVarName(name); + // + // Let the property name capitalized + // except when the first letter of the property name is lowercase and the second letter is uppercase + // Refer to section 8.8: Capitalization of inferred names of the JavaBeans API specification + // http://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf) + // + if (name.length() > 1 && Character.isLowerCase(name.charAt(0)) && Character.isUpperCase(name.charAt(1))) { + lowercaseFirstLetter = true; + } + return camelize(name, lowercaseFirstLetter); + } + + + @Override public void postProcessFile(File file, String fileType) { if (file == null) { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaModelTest.java index 73cf558b70e..06844bb0fef 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaModelTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaModelTest.java @@ -227,7 +227,7 @@ public class JavaModelTest { Assert.assertTrue(property.isContainer); } - @Test(description = "convert a model with restriced characters") + @Test(description = "convert a model with restricted characters") public void restrictedCharactersPropertiesTest() { final Schema schema = new Schema() .description("a sample model") @@ -468,8 +468,8 @@ public class JavaModelTest { final CodegenProperty property = cm.vars.get(0); Assert.assertEquals(property.baseName, "pId"); - Assert.assertEquals(property.getter, "getPId"); - Assert.assertEquals(property.setter, "setPId"); + Assert.assertEquals(property.getter, "getpId"); + Assert.assertEquals(property.setter, "setpId"); Assert.assertEquals(property.dataType, "String"); Assert.assertEquals(property.name, "pId"); Assert.assertEquals(property.defaultValue, null); @@ -507,6 +507,34 @@ public class JavaModelTest { Assert.assertFalse(property.isContainer); } + @Test(description = "convert a model with an all upper-case letter and one non letter property names") + public void allUpperCaseOneNonLetterNamesTest() { + final Schema schema = new Schema() + .description("a model with a property name starting with two upper-case letters") + .addProperties("ATT_NAME", new StringSchema()) + .addRequiredItem("ATT_NAME"); + final DefaultCodegen codegen = new JavaClientCodegen(); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", schema); + codegen.setOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel("sample", schema); + + Assert.assertEquals(cm.name, "sample"); + Assert.assertEquals(cm.classname, "Sample"); + Assert.assertEquals(cm.vars.size(), 1); + + final CodegenProperty property = cm.vars.get(0); + Assert.assertEquals(property.baseName, "ATT_NAME"); + Assert.assertEquals(property.getter, "getATTNAME"); + Assert.assertEquals(property.setter, "setATTNAME"); + Assert.assertEquals(property.dataType, "String"); + Assert.assertEquals(property.name, "ATT_NAME"); + Assert.assertEquals(property.defaultValue, null); + Assert.assertEquals(property.baseType, "String"); + Assert.assertFalse(property.hasMore); + Assert.assertTrue(property.required); + Assert.assertFalse(property.isContainer); + } + @Test(description = "convert hyphens per issue 503") public void hyphensTest() { final Schema schema = new Schema() -- GitLab