From 80b6dd933fea75f60d6ee7d33968032e81f52102 Mon Sep 17 00:00:00 2001 From: Tim Selman Date: Wed, 7 Jun 2023 13:00:41 +0200 Subject: [PATCH] Improve camelization in DefaultCodegen --- .../openapitools/codegen/DefaultCodegen.java | 33 +++++++++++++++++-- .../codegen/DefaultCodegenTest.java | 11 +++++++ 2 files changed, 42 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 3cecbc9347d..43a1d1d77ae 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 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.openapitools.codegen; + package org.openapitools.codegen; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; @@ -5910,7 +5910,13 @@ public class DefaultCodegen implements CodegenConfig { * @return camelized string */ protected String removeNonNameElementToCamelCase(final String name, final String nonNameElementPattern) { - String result = Arrays.stream(name.split(nonNameElementPattern)) + String[] splitString = name.split(nonNameElementPattern); + + if (splitString.length > 0) { + splitString[0] = lowerStartOfWord(splitString[0]); + } + + String result = Arrays.stream(splitString) .map(StringUtils::capitalize) .collect(Collectors.joining("")); if (result.length() > 0) { @@ -5919,6 +5925,29 @@ public class DefaultCodegen implements CodegenConfig { return result; } + /** + * Puts the first letters to lowercase. If the word starts with multiple capital letters, all of them + * will be converted to lowercase. + * @param name string to be changed + * @return string starting with lowercase + */ + private String lowerStartOfWord(final String name) { + final StringBuilder result = new StringBuilder(); + boolean isStartingBlock = true; + for (int i = 0; i < name.length(); i++) { + char current = name.charAt(i); + if (isStartingBlock && Character.isUpperCase(current)) { + current = Character.toLowerCase(current); + } else { + isStartingBlock = false; + } + + result.append(current); + } + + return result.toString(); + } + @Override public String apiFilename(String templateName, String tag) { String suffix = apiTemplateFiles().get(templateName); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 4044533234a..0fa56b9dc21 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -4722,4 +4722,15 @@ public class DefaultCodegenTest { Assert.assertTrue(codegen.cliOptions.contains(expected)); } + + @Test + public void testRemoveNonNameElementToCamelCase() { + final DefaultCodegen codegen = new DefaultCodegen(); + + final String alreadyCamelCase = "aVATRate"; + Assert.assertEquals(codegen.removeNonNameElementToCamelCase(alreadyCamelCase), alreadyCamelCase); + + final String startWithCapitals = "DELETE_Invoice"; + Assert.assertEquals(codegen.removeNonNameElementToCamelCase(startWithCapitals), "deleteInvoice"); + } }