diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java index 94a88df56cf..64e1a18ed32 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java @@ -360,4 +360,6 @@ public interface CodegenConfig { Set getOpenAPIGeneratorIgnoreList(); + void setApplyCamelizeFix(boolean applyCamelizeFix); + } 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 3535c103181..edd5663c826 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 @@ -317,6 +317,9 @@ public class DefaultCodegen implements CodegenConfig { // Whether to automatically hardcode params that are considered Constants by OpenAPI Spec protected boolean autosetConstants = false; + // when set to true, apply camelization fix + protected boolean applyCamelizeFix = false; + public boolean getAddSuffixToDuplicateOperationNicknames() { return addSuffixToDuplicateOperationNicknames; } @@ -6182,7 +6185,7 @@ public class DefaultCodegen implements CodegenConfig { */ protected String removeNonNameElementToCamelCase(final String name, final String nonNameElementPattern) { if (Boolean.parseBoolean(System.getProperty("openapi.generator.fix.camelize"))) { - // new bebahviour with fix + // new behaviour with fix String[] splitString = name.split(nonNameElementPattern); if (splitString.length > 0) { @@ -8519,6 +8522,8 @@ public class DefaultCodegen implements CodegenConfig { this.autosetConstants = autosetConstants; } + public void setApplyCamelizeFix(boolean applyCamelizeFix) { this.applyCamelizeFix = applyCamelizeFix; } + /** * This method removes all constant Query, Header and Cookie Params from allParams and sets them as constantParams in the CodegenOperation. * The definition of constant is single valued required enum params. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 8760af0bc7d..2679f9bc138 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -17,6 +17,7 @@ package org.openapitools.codegen; +import com.fasterxml.jackson.databind.annotation.JsonAppend; import io.swagger.v3.core.util.Json; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -257,6 +258,13 @@ public class DefaultGenerator implements Generator { System.out.println(SerializerUtils.toJsonString(openAPI)); } + // check to see if we need to apply camelize fix + if (config.additionalProperties().containsKey("applyCamelizeFix")) { + org.openapitools.codegen.utils.StringUtils.applyCamelizeFix = + Boolean.parseBoolean(String.valueOf(config.additionalProperties().get("applyCamelizeFix"))); + config.setApplyCamelizeFix(true); + } + config.processOpts(); if (opts != null && opts.getGeneratorSettings() != null) { config.typeMapping().putAll(opts.getGeneratorSettings().getTypeMappings()); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/StringUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/StringUtils.java index 7db6775935d..1f024660b3e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/StringUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/StringUtils.java @@ -29,6 +29,9 @@ public class StringUtils { */ public static final String NAME_CACHE_EXPIRY_PROPERTY = "org.openapitools.codegen.utils.namecache.expireafter.seconds"; + // if set true, enable the camelize fix + public static boolean applyCamelizeFix = false; + // A cache of camelized words. The camelize() method is invoked many times with the same // arguments, this cache is used to optimized performance. private static Cache, String> camelizedWordsCache; @@ -39,6 +42,8 @@ public class StringUtils { // A cache of escaped words, used to optimize the performance of the escape() method. private static Cache escapedWordsCache; + + static { int cacheSize = Integer.parseInt(GlobalSettings.getProperty(NAME_CACHE_SIZE_PROPERTY, "200")); int cacheExpiry = Integer.parseInt(GlobalSettings.getProperty(NAME_CACHE_EXPIRY_PROPERTY, "5")); @@ -59,6 +64,7 @@ public class StringUtils { .expireAfterAccess(cacheExpiry, TimeUnit.SECONDS) .ticker(Ticker.systemTicker()) .build(); + } private static Pattern capitalLetterPattern = Pattern.compile("([A-Z]+)([A-Z][a-z][a-z]+)"); @@ -137,9 +143,9 @@ public class StringUtils { String word = pair.getKey(); CamelizeOption option = pair.getValue(); - // Lowercase acronyms at start of word if not UPPERCASE_FIRST_CHAR Matcher m; - if (Boolean.parseBoolean(System.getProperty("openapi.generator.fix.camelize"))) { + // Lowercase acronyms at start of word if not UPPERCASE_FIRST_CHAR + if (applyCamelizeFix) { m = camelizeUppercaseStartPattern.matcher(word); if (camelizeOption != UPPERCASE_FIRST_CHAR && m.find()) { word = m.group(1).toLowerCase(Locale.ROOT) + m.group(2);