From 930fc61cfa3bcca727c4c1b64ca65fa680bb96c0 Mon Sep 17 00:00:00 2001 From: Mattias-Sehlstedt <60173714+Mattias-Sehlstedt@users.noreply.github.com> Date: Fri, 7 Aug 2026 11:53:08 +0200 Subject: [PATCH 1/2] refactor: replace getEnumVarsAsString with getEnumVars for improved type handling --- .../codegen/languages/AbstractFSharpCodegen.java | 9 ++++----- .../codegen/languages/CrystalClientCodegen.java | 4 ++-- .../codegen/languages/HaskellHttpClientCodegen.java | 5 ++--- .../codegen/languages/ProtobufSchemaCodegen.java | 8 +++----- .../codegen/languages/RClientCodegen.java | 1 - .../codegen/languages/RubyClientCodegen.java | 4 ++-- .../languages/TypeScriptFetchClientCodegen.java | 4 ++-- .../org/openapitools/codegen/utils/EnumUtils.java | 11 ----------- .../codegen/protobuf/ProtobufSchemaCodegenTest.java | 2 +- 9 files changed, 16 insertions(+), 32 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java index 303ddc01dee1..470588bd8a5a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java @@ -37,11 +37,10 @@ import java.io.File; import java.util.*; -import static org.openapitools.codegen.CodegenConstants.ENUM_VARS; import static org.openapitools.codegen.CodegenConstants.X_ENUM_BYTE; import static org.openapitools.codegen.CodegenConstants.X_EXAMPLE; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVarsAsString; +import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; import static org.openapitools.codegen.utils.StringUtils.underscore; @@ -451,12 +450,12 @@ private void postProcessEnumRefs(final Map models) { // Since we iterate enumVars for modelInnerEnum and enumClass templates, and CodegenModel is missing some of CodegenProperty's properties, // we can take advantage of Mustache's contextual lookup to add the same "properties" to the model's enumVars scope rather than CodegenProperty's scope. - List> enumVars = getEnumVarsAsString(model.allowableValues); + List> enumVars = getEnumVars(model.allowableValues); List> newEnumVars = new ArrayList<>(); - for (Map enumVar : enumVars) { + for (Map enumVar : enumVars) { Map mixedVars = new HashMap<>(enumVar); - mixedVars.put("isString", isString); + mixedVars.put(ENUM_IS_STRING, isString); mixedVars.put("isLong", isLong); mixedVars.put("isInteger", isInteger); mixedVars.put("isByte", isByte); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java index 41a01bffd569..518533551bdf 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java @@ -41,7 +41,7 @@ import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVarsAsString; +import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; import static org.openapitools.codegen.utils.StringUtils.underscore; @@ -1100,7 +1100,7 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap> enumVars = getEnumVarsAsString(codegenModel.allowableValues); + List> enumVars = getEnumVars(codegenModel.allowableValues); return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).get(ENUM_NAME); } else if (codegenModel.oneOf != null && !codegenModel.oneOf.isEmpty()) { String subModel = (String) codegenModel.oneOf.toArray()[0]; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java index 192cc62e31f3..d43a6505eea0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java @@ -42,10 +42,9 @@ import java.util.stream.Collectors; import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; -import static org.openapitools.codegen.CodegenConstants.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.CamelizeOption.UPPERCASE_FIRST_CHAR; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVarsAsString; +import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; import static org.openapitools.codegen.utils.StringUtils.underscore; @@ -1413,7 +1412,7 @@ private void updateAllowableValuesNames(String paramNameType, Map enumVar : getEnumVarsAsString(allowableValues)) { + for (Map enumVar : getEnumVars(allowableValues)) { enumVar.put(ENUM_NAME, paramNameType + enumVar.get(ENUM_NAME)); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java index 42cb762e732f..5aaae1749747 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java @@ -600,13 +600,11 @@ public void addUnspecifiedToAllowableValues(Map allowableValues) if (hasEnumVars(allowableValues)) { List> enumVars = getEnumVars(allowableValues); boolean unspecifiedPresent = enumVars.stream() - .anyMatch(e -> { - return UNSPECIFIED.equals(e.get(ENUM_NAME)); - }); + .anyMatch(e -> UNSPECIFIED.equals(e.get(ENUM_NAME))); if (!unspecifiedPresent) { - HashMap unspecifiedEnum = new HashMap(); + HashMap unspecifiedEnum = new HashMap<>(); unspecifiedEnum.put(ENUM_NAME, UNSPECIFIED); - unspecifiedEnum.put(ENUM_IS_STRING, "false"); + unspecifiedEnum.put(ENUM_IS_STRING, false); unspecifiedEnum.put(ENUM_VALUE, "\"" + UNSPECIFIED + "\""); enumVars.add(0, unspecifiedEnum); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java index 0a15106d15ee..980baf7a6a65 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RClientCodegen.java @@ -40,7 +40,6 @@ import java.util.*; import java.util.regex.Pattern; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.StringUtils.camelize; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java index 47c841c88e3c..07e391610887 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java @@ -39,7 +39,7 @@ import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVarsAsString; +import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; import static org.openapitools.codegen.utils.StringUtils.underscore; @@ -784,7 +784,7 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap> enumVars = getEnumVarsAsString(codegenModel.allowableValues); + List> enumVars = getEnumVars(codegenModel.allowableValues); return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).get(ENUM_NAME); } else if (codegenModel.oneOf != null && !codegenModel.oneOf.isEmpty()) { String subModel = (String) codegenModel.oneOf.toArray()[0]; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java index f713a7e677d7..716f29004a03 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java @@ -49,7 +49,7 @@ import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; import static org.openapitools.codegen.CodegenConstants.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVarsAsString; +import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.OnceLogger.once; import static org.openapitools.codegen.utils.StringUtils.*; @@ -606,7 +606,7 @@ private void autoSetDefaultValueForProperty(ExtendedCodegenProperty var) { var.defaultValue = "false"; } else { if (var.allowableValues != null && var.allowableValues.get(ENUM_VARS) instanceof ArrayList && ((ArrayList) var.allowableValues.get(ENUM_VARS)).get(0) instanceof HashMap) { - var.defaultValue = var.dataTypeAlternate + "." + getEnumVarsAsString(var.allowableValues).get(0).get(ENUM_NAME); + var.defaultValue = var.dataTypeAlternate + "." + getEnumVars(var.allowableValues).get(0).get(ENUM_NAME); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java index 0cd4d5e8b536..79acc0386584 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java @@ -59,17 +59,6 @@ public static List getEnumValues(Map allowableValues) { return enumValues; } - /** - * Get the {@value CodegenConstants#ENUM_VARS} from the allowableValues map. - * @param allowableValues The allowableValues map - * @return the list of enumVars - */ - public static List> getEnumVarsAsString(Map allowableValues) { - @SuppressWarnings("unchecked") - List> enumVars = (List>) allowableValues.get(ENUM_VARS); - return enumVars; - } - /** * Get the {@value CodegenConstants#ENUM_VALUES} from the allowableValues map. * @param allowableValues The allowableValues map diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/protobuf/ProtobufSchemaCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/protobuf/ProtobufSchemaCodegenTest.java index e6c3d9721e03..7e9c4f786101 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/protobuf/ProtobufSchemaCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/protobuf/ProtobufSchemaCodegenTest.java @@ -312,7 +312,7 @@ public void unspecifiedEnumValuesAreAdded() { Assert.assertEquals(enumVars1.get(0).get("name"), "UNSPECIFIED"); Assert.assertEquals(enumVars1.get(0).get("value"), "UNSPECIFIED"); - Assert.assertEquals(Boolean.valueOf((String) enumVars1.get(0).get("isString")), false); + Assert.assertEquals(enumVars1.get(0).get("isString"), false); Assert.assertEquals(enumVars1.get(1).get("name"), "FOO"); Assert.assertEquals(enumVars1.get(1).get("value"), "FOO"); From 889607d535ed6129f37d429d1c628aaf3b8df786 Mon Sep 17 00:00:00 2001 From: Mattias-Sehlstedt <60173714+Mattias-Sehlstedt@users.noreply.github.com> Date: Thu, 6 Aug 2026 21:23:57 +0200 Subject: [PATCH 2/2] refactor: introduce EnumVarMap for improved enum handling across code generators --- .../codegen/CodegenConstants.java | 13 ---- .../openapitools/codegen/DefaultCodegen.java | 60 ++++++++-------- .../languages/AbstractCSharpCodegen.java | 9 +-- .../languages/AbstractDartCodegen.java | 11 ++- .../languages/AbstractFSharpCodegen.java | 14 ++-- .../codegen/languages/AbstractPhpCodegen.java | 5 +- .../languages/AbstractPythonCodegen.java | 9 +-- .../AbstractPythonPydanticV1Codegen.java | 10 +-- .../codegen/languages/AvroSchemaCodegen.java | 3 +- .../languages/CppHttplibServerCodegen.java | 2 +- .../languages/CrystalClientCodegen.java | 12 ++-- .../codegen/languages/GoClientCodegen.java | 10 +-- .../languages/HaskellHttpClientCodegen.java | 6 +- .../languages/JavaCXFExtServerCodegen.java | 8 +-- .../codegen/languages/JavaClientCodegen.java | 8 ++- .../languages/JavaHelidonClientCodegen.java | 8 ++- .../languages/KotlinClientCodegen.java | 3 - .../codegen/languages/MysqlSchemaCodegen.java | 1 - .../codegen/languages/NimClientCodegen.java | 11 ++- .../codegen/languages/OCamlClientCodegen.java | 12 ++-- .../languages/PostgresqlSchemaCodegen.java | 1 - .../languages/ProtobufSchemaCodegen.java | 31 ++++----- .../codegen/languages/RubyClientCodegen.java | 6 +- .../codegen/languages/RustServerCodegen.java | 4 +- .../languages/ScalaLagomServerCodegen.java | 1 - .../TypeScriptFetchClientCodegen.java | 5 +- .../codegen/model/EnumVarMap.java | 68 +++++++++++++++++++ .../openapitools/codegen/utils/EnumUtils.java | 21 +++--- 28 files changed, 206 insertions(+), 146 deletions(-) create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/model/EnumVarMap.java diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index ee5cea2c78c1..abfe57b60314 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -488,19 +488,6 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case, public static final String DEFAULT_TO_EMPTY_CONTAINER = "defaultToEmptyContainer"; public static final String DEFAULT_TO_EMPTY_CONTAINER_DESC = "Initialize containers (array/set/map) to empty containers instead of null by default. Usage: https://github.com/OpenAPITools/openapi-generator/blob/master/docs/customization.md#default-values"; - // The raw enum values from the OpenAPI specification - public static final String ENUM_VALUES = "values"; - // The map that stores all enum values and their metadata (name, value, enumDescription...) - public static final String ENUM_VARS = "enumVars"; - // The name of the enum, for example NAME("value") in Java - public static final String ENUM_NAME = "name"; - // The on-the-line value, i.e., the one present in the "values" - public static final String ENUM_VALUE = "value"; - // If the enum is typed as a string - public static final String ENUM_IS_STRING = "isString"; - // The description that should be attached to an entry in "enumVars" - public static final String ENUM_DESCRIPTION = "enumDescription"; - // Vendor extensions public static final String X_EXAMPLE = "x-example"; public static final String X_INTERNAL = "x-internal"; 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 1e8d2c7b181e..6d6c631aec1e 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 @@ -63,6 +63,7 @@ import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationsMap; import org.openapitools.codegen.model.WebhooksMap; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.serializer.SerializerUtils; import org.openapitools.codegen.templating.MustacheEngineAdapter; import org.openapitools.codegen.templating.mustache.*; @@ -92,6 +93,7 @@ import java.util.stream.Stream; import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.*; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.DiscriminatorUtils.*; import static org.openapitools.codegen.utils.EnumUtils.*; @@ -901,7 +903,7 @@ public ModelsMap postProcessModelsEnum(ModelsMap objs) { // for enum model if (cm.isEnum && cm.allowableValues != null) { List values = getEnumValues(cm.allowableValues); - List> enumVars = buildEnumVars(values, cm.dataType); + List enumVars = buildEnumVars(values, cm.dataType); postProcessEnumVars(enumVars); // if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames updateEnumVarsWithExtensions(enumVars, cm.getVendorExtensions(), cm.dataType); @@ -7008,7 +7010,7 @@ public void setParameterBooleanFlagWithCodegenProperty(CodegenParameter paramete } /** - * Update codegen property's enum by adding {@value CodegenConstants#ENUM_VARS} (with name and value) + * Update codegen property's enum by adding {@value EnumVarMap#ENUM_VARS} (with name and value) * * @param var list of CodegenProperty */ @@ -7035,7 +7037,7 @@ public void updateCodegenPropertyEnum(CodegenProperty var) { .map(Map.Entry::getValue) .findFirst(); String dataType = (referencedSchema.isPresent()) ? getTypeDeclaration(referencedSchema.get()) : varDataType; - List> enumVars = buildEnumVars(values, dataType); + List enumVars = buildEnumVars(values, dataType); postProcessEnumVars(enumVars); // if "x-enum-varnames" or "x-enum-descriptions" defined, update varnames @@ -7051,9 +7053,9 @@ public void updateCodegenPropertyEnum(CodegenProperty var) { final String enumDefaultValue = getEnumDefaultValue(var.defaultValue, dataType); String enumName = null; - for (Map enumVar : enumVars) { - if (enumDefaultValue.equals(enumVar.get(ENUM_VALUE))) { - enumName = (String) enumVar.get(ENUM_NAME); + for (EnumVarMap enumVar : enumVars) { + if (enumDefaultValue.equals(enumVar.getEnumValue())) { + enumName = (String) enumVar.getEnumName(); break; } } @@ -7073,8 +7075,8 @@ protected String getEnumDefaultValue(String defaultValue, String dataType) { return enumDefaultValue; } - protected List> buildEnumVars(List values, String dataType) { - List> enumVars = new ArrayList<>(); + protected List buildEnumVars(List values, String dataType) { + List enumVars = new ArrayList<>(); int truncateIdx = isRemoveEnumValuePrefix() ? findCommonPrefixOfVars(values).length() : 0; @@ -7085,7 +7087,7 @@ protected List> buildEnumVars(List values, String da // attributes, not actual enum values, so we remove them here continue; } - Map enumVar = new HashMap<>(); + EnumVarMap enumVar = new EnumVarMap(); String enumName = truncateIdx == 0 ? String.valueOf(value) : value.toString().substring(truncateIdx); @@ -7096,9 +7098,7 @@ protected List> buildEnumVars(List values, String da final String finalEnumName = toEnumVarName(enumName, dataType); - enumVar.put(ENUM_NAME, finalEnumName); - enumVar.put(ENUM_VALUE, toEnumValue(String.valueOf(value), dataType)); - enumVar.put(ENUM_IS_STRING, isDataTypeString(dataType)); + enumVar.enumVar(finalEnumName, toEnumValue(String.valueOf(value), dataType), isDataTypeString(dataType)); // TODO: add isNumeric enumVars.add(enumVar); } @@ -7117,8 +7117,8 @@ protected List> buildEnumVars(List values, String da * @param enumVars the enumVars * @param dataType the data type of the enum parameter */ - private void injectEnumUnknownDefaultCase(List> enumVars, String dataType) { - Map enumVar = new HashMap<>(); + private void injectEnumUnknownDefaultCase(List enumVars, String dataType) { + EnumVarMap enumVar = new EnumVarMap(); String enumName = enumUnknownDefaultCaseName; String enumValue = isDataTypeString(dataType) @@ -7131,9 +7131,7 @@ private void injectEnumUnknownDefaultCase(List> enumVars, St // https://github.com/OpenAPITools/openapi-generator/pull/11013 String.valueOf(11184809); - enumVar.put(ENUM_NAME, toEnumVarName(enumName, dataType)); - enumVar.put(ENUM_VALUE, toEnumValue(enumValue, dataType)); - enumVar.put(ENUM_IS_STRING, isDataTypeString(dataType)); + enumVar.enumVar(toEnumVarName(enumName, dataType), toEnumValue(enumValue, dataType), isDataTypeString(dataType)); // TODO: add isNumeric enumVars.add(enumVar); } @@ -7148,31 +7146,31 @@ private void injectEnumUnknownDefaultCase(List> enumVars, St protected void removeEnumUnknownDefaultCase(CodegenOperation operation) { for (CodegenParameter param : operation.allParams) { if (!param.isBodyParam && param.isEnum && hasEnumVars(param.allowableValues)) { - List> enumVars = getEnumVars(param.allowableValues); + List enumVars = getEnumVars(param.allowableValues); if (enumVars != null) { String unknownName = toEnumVarName(enumUnknownDefaultCaseName, param.dataType); - enumVars.removeIf(ev -> unknownName.equals(ev.get(ENUM_NAME))); + enumVars.removeIf(ev -> unknownName.equals(ev.getEnumName())); } } } } - protected void postProcessEnumVars(List> enumVars) { + protected void postProcessEnumVars(List enumVars) { Collections.reverse(enumVars); enumVars.forEach(v -> { - String name = (String) v.get(ENUM_NAME); - long count = enumVars.stream().filter(v1 -> v1.get(ENUM_NAME).equals(name)).count(); + String name = (String) v.getEnumName(); + long count = enumVars.stream().filter(v1 -> v1.getEnumName().equals(name)).count(); if (count > 1) { String uniqueEnumName = getUniqueEnumName(name, enumVars); - LOGGER.debug("Changing duplicate enumeration name from {} to {}", v.get(ENUM_NAME), uniqueEnumName); - v.put(ENUM_NAME, uniqueEnumName); + LOGGER.debug("Changing duplicate enumeration name from {} to {}", v.getEnumName(), uniqueEnumName); + v.setEnumName(uniqueEnumName); } }); Collections.reverse(enumVars); } - private String getUniqueEnumName(String name, List> enumVars) { - long count = enumVars.stream().filter(v -> v.get(ENUM_NAME).equals(name)).count(); + private String getUniqueEnumName(String name, List enumVars) { + long count = enumVars.stream().filter(v -> v.getEnumName().equals(name)).count(); return count > 1 ? getUniqueEnumName(name + count, enumVars) : name; @@ -7185,7 +7183,7 @@ private String getUniqueEnumName(String name, List> enumVars * @param vendorExtensions vendor extensions * @param dataType data type */ - protected void updateEnumVarsWithExtensions(List> enumVars, Map vendorExtensions, String dataType) { + protected void updateEnumVarsWithExtensions(List enumVars, Map vendorExtensions, String dataType) { if (vendorExtensions != null) { updateEnumVarsWithExtensions(enumVars, vendorExtensions, X_ENUM_VARNAMES, ENUM_NAME, dataType); updateEnumVarsWithExtensions(enumVars, vendorExtensions, X_ENUM_DESCRIPTIONS, ENUM_DESCRIPTION, dataType); @@ -7201,7 +7199,7 @@ protected void updateEnumVarsWithExtensions(List> enumVars, * @param key key * @param dataType data type */ - protected void updateEnumVarsWithExtensions(List> enumVars, Map vendorExtensions, String extensionKey, String key, String dataType) { + protected void updateEnumVarsWithExtensions(List enumVars, Map vendorExtensions, String extensionKey, String key, String dataType) { updateEnumVarsWithExtensions(enumVars, vendorExtensions, extensionKey, key, dataType, (a, b) -> a); } @@ -7214,7 +7212,7 @@ protected void updateEnumVarsWithExtensions(List> enumVars, * @param dataType data type * @param enumDataTypeMapping functions that accepts 2 arguments */ - protected void updateEnumVarsWithExtensions(List> enumVars, + protected void updateEnumVarsWithExtensions(List enumVars, Map vendorExtensions, String extensionKey, String key, @@ -7230,8 +7228,8 @@ protected void updateEnumVarsWithExtensions(List> enumVars, } } else if (extensionValue instanceof Map) { Map valueMap = (Map) extensionValue; - for (Map enumVar : enumVars) { - String enumValue = (String) enumVar.get(ENUM_VALUE); + for (EnumVarMap enumVar : enumVars) { + String enumValue = (String) enumVar.getEnumValue(); for (Map.Entry entry : valueMap.entrySet()) { if (toEnumValue(entry.getKey(), dataType).equals(enumValue)) { enumVar.put(key, enumDataTypeMapping.apply(entry.getValue(), dataType)); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java index 269afedcd981..f56f47491953 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java @@ -32,6 +32,7 @@ import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; import org.openapitools.codegen.model.WebhooksMap; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.templating.mustache.*; import org.openapitools.codegen.templating.mustache.CopyLambda.CopyContent; import org.openapitools.codegen.templating.mustache.CopyLambda.WhiteSpaceStrategy; @@ -899,15 +900,15 @@ protected void patchProperty(Map enumRefs, CodegenModel mo } @Override - protected List> buildEnumVars(List values, String dataType) { - List> enumVars = super.buildEnumVars(values, dataType); + protected List buildEnumVars(List values, String dataType) { + List enumVars = super.buildEnumVars(values, dataType); // this is needed for enumRefs like OuterEnum marked as nullable and also have string values // keep isString true so that the index will be used as the enum value instead of a string // this is inline with C# enums with string values if ("string?".equals(dataType)) { enumVars.forEach((enumVar) -> { - enumVar.put(ENUM_IS_STRING, true); + enumVar.isString(true); }); } @@ -920,7 +921,7 @@ protected List> buildEnumVars(List values, String da } /** - * Update codegen property's enum by adding {@value CodegenConstants#ENUM_VARS} (with name and value) + * Update codegen property's enum by adding {@value EnumVarMap#ENUM_VARS} (with name and value) * * @param var list of CodegenProperty */ diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index 835b21ad840e..14df27726545 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -28,7 +29,7 @@ import java.util.*; import java.util.stream.Stream; -import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.*; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.BUNGIE_X_ENUM_VALUES; import static org.openapitools.codegen.utils.EnumUtils.getBungieEnumValues; @@ -860,7 +861,7 @@ private List> prioritizeContentTypes(List> enumVars, Map vendorExtensions, String dataType) { + protected void updateEnumVarsWithExtensions(List enumVars, Map vendorExtensions, String dataType) { if (vendorExtensions != null && useEnumExtension && vendorExtensions.containsKey(BUNGIE_X_ENUM_VALUES)) { // Use the x-enum-values extension for this enum // Existing enumVars added by the default handling need to be removed first @@ -870,10 +871,8 @@ protected void updateEnumVarsWithExtensions(List> enumVars, boolean isString = isDataTypeString(dataType); for (Map value : bungieEnumValues) { - Map enumVar = new HashMap<>(value); - enumVar.put(ENUM_NAME, toEnumVarName(value.get(ENUM_NAME), dataType)); - enumVar.put(ENUM_VALUE, toEnumValue(value.get(ENUM_VALUE), dataType)); - enumVar.put(ENUM_IS_STRING, isString); + EnumVarMap enumVar = new EnumVarMap(value); + enumVar.enumVar(toEnumVarName(value.get(ENUM_NAME), dataType), toEnumValue(value.get(ENUM_VALUE), dataType), isString); enumVars.add(enumVar); } } else { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java index 470588bd8a5a..68c16233508e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractFSharpCodegen.java @@ -25,6 +25,7 @@ import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -39,6 +40,7 @@ import static org.openapitools.codegen.CodegenConstants.X_ENUM_BYTE; import static org.openapitools.codegen.CodegenConstants.X_EXAMPLE; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -450,12 +452,12 @@ private void postProcessEnumRefs(final Map models) { // Since we iterate enumVars for modelInnerEnum and enumClass templates, and CodegenModel is missing some of CodegenProperty's properties, // we can take advantage of Mustache's contextual lookup to add the same "properties" to the model's enumVars scope rather than CodegenProperty's scope. - List> enumVars = getEnumVars(model.allowableValues); - List> newEnumVars = new ArrayList<>(); - for (Map enumVar : enumVars) { - Map mixedVars = new HashMap<>(enumVar); + List enumVars = getEnumVars(model.allowableValues); + List newEnumVars = new ArrayList<>(); + for (EnumVarMap enumVar : enumVars) { + EnumVarMap mixedVars = new EnumVarMap(enumVar); - mixedVars.put(ENUM_IS_STRING, isString); + mixedVars.isString(isString); mixedVars.put("isLong", isLong); mixedVars.put("isInteger", isInteger); mixedVars.put("isByte", isByte); @@ -474,7 +476,7 @@ private void postProcessEnumRefs(final Map models) { } /** - * Update codegen property's enum by adding {@value CodegenConstants#ENUM_VARS} (with name and value) + * Update codegen property's enum by adding {@value EnumVarMap#ENUM_VARS} (with name and value) * * @param var list of CodegenProperty */ diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java index 0dce98a4fb5c..7051fcea4f87 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java @@ -24,6 +24,7 @@ import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -39,6 +40,8 @@ import java.util.regex.Pattern; import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_DESCRIPTION; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_NAME; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.CamelizeOption.UPPERCASE_FIRST_CHAR; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -822,7 +825,7 @@ public void setParameterExampleValue(CodegenParameter p) { } @Override - protected void updateEnumVarsWithExtensions(List> enumVars, Map vendorExtensions, String dataType) { + protected void updateEnumVarsWithExtensions(List enumVars, Map vendorExtensions, String dataType) { if (vendorExtensions != null) { updateEnumVarsWithExtensions(enumVars, vendorExtensions, X_ENUM_VARNAMES, ENUM_NAME, dataType, this::toEnumVarName); updateEnumVarsWithExtensions(enumVars, vendorExtensions, X_ENUM_DESCRIPTIONS, ENUM_DESCRIPTION, dataType); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java index b02f4f141ce8..f2ab264952cd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java @@ -29,6 +29,7 @@ import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.SecurityFeature; import org.openapitools.codegen.meta.features.DataTypeFeature; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -1138,18 +1139,18 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) { // set enum type in extensions and update `name` in enumVars if (model.isEnum) { - for (Map enumVars : getEnumVars(model.getAllowableValues())) { - if ((Boolean) enumVars.get(ENUM_IS_STRING)) { + for (EnumVarMap enumVars : getEnumVars(model.getAllowableValues())) { + if (enumVars.isString()) { model.vendorExtensions.putIfAbsent(X_PY_ENUM_TYPE, "str"); // Do not overwrite the variable name if already set through x-enum-varnames if (model.vendorExtensions.get(X_ENUM_VARNAMES) == null) { - enumVars.put(ENUM_NAME, toEnumVariableName((String) enumVars.get(ENUM_VALUE), "str")); + enumVars.setEnumName(toEnumVariableName((String) enumVars.getEnumValue(), "str")); } } else { model.vendorExtensions.putIfAbsent(X_PY_ENUM_TYPE, "int"); // Do not overwrite the variable name if already set through x-enum-varnames if (model.vendorExtensions.get(X_ENUM_VARNAMES) == null) { - enumVars.put(ENUM_NAME, toEnumVariableName((String) enumVars.get(ENUM_VALUE), "int")); + enumVars.setEnumName(toEnumVariableName((String) enumVars.getEnumValue(), "int")); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java index f69f811a1b1a..796e99e1eab4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonPydanticV1Codegen.java @@ -27,10 +27,12 @@ import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.SecurityFeature; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; +import org.openapitools.codegen.utils.EnumUtils; import org.openapitools.codegen.utils.ModelUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -978,14 +980,14 @@ private ModelsMap postProcessModelsMap(ModelsMap objs) { // set enum type in extensions and update `name` in enumVars if (model.isEnum) { - for (Map enumVars : (List>) model.getAllowableValues().get(ENUM_VARS)) { - if ((Boolean) enumVars.get(ENUM_IS_STRING)) { + for (EnumVarMap enumVars : EnumUtils.getEnumVars(model.getAllowableValues())) { + if (enumVars.isString()) { model.vendorExtensions.putIfAbsent(X_PY_ENUM_TYPE, "str"); // update `name`, e.g. - enumVars.put(ENUM_NAME, toEnumVariableName((String) enumVars.get(ENUM_VALUE), "str")); + enumVars.setEnumName(toEnumVariableName((String) enumVars.getEnumValue(), "str")); } else { model.vendorExtensions.putIfAbsent(X_PY_ENUM_TYPE, "int"); - enumVars.put(ENUM_NAME, toEnumVariableName((String) enumVars.get(ENUM_VALUE), "int")); + enumVars.setEnumName(toEnumVariableName((String) enumVars.getEnumValue(), "int")); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java index 2fe4d50812b4..617a6d55b4fa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java @@ -26,6 +26,7 @@ import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.utils.ModelUtils; import org.slf4j.Logger; @@ -251,7 +252,7 @@ public String escapeQuotationMark(String input) { } @Override - protected List> buildEnumVars(List values, String dataType) { + protected List buildEnumVars(List values, String dataType) { List sanitizedValues = values.stream() .filter(x -> x != null) .map(Object::toString) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppHttplibServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppHttplibServerCodegen.java index 7f4a2e09d6eb..207eb2872e9b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppHttplibServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppHttplibServerCodegen.java @@ -59,7 +59,7 @@ import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.responses.ApiResponse; -import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.EnumUtils.hasEnumValues; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java index 518533551bdf..06f227a0a416 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CrystalClientCodegen.java @@ -24,6 +24,7 @@ import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -39,7 +40,6 @@ import java.time.ZoneId; import java.util.*; -import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -825,9 +825,9 @@ public org.openapitools.codegen.model.WebhooksMap postProcessWebhooksWithModels( * Shared post-processing for one generated api class, whether its operations come from * {@code paths} or from {@code webhooks}. * - * @param objs the template bundle for the api file (also carries specHelperPath) - * @param operations the operations to process, or null when the group is empty - * @param allModels every generated model, used to qualify model types and build examples + * @param objs the template bundle for the api file (also carries specHelperPath) + * @param operations0 the operations to process, or null when the group is empty + * @param allModels every generated model, used to qualify model types and build examples */ private void processApiGroup(Map objs, OperationMap operations0, List allModels) { String classname = (operations0 != null) ? operations0.getClassname() : ""; @@ -1100,8 +1100,8 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap> enumVars = getEnumVars(codegenModel.allowableValues); - return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).get(ENUM_NAME); + List enumVars = getEnumVars(codegenModel.allowableValues); + return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).getEnumName(); } else if (codegenModel.oneOf != null && !codegenModel.oneOf.isEmpty()) { String subModel = (String) codegenModel.oneOf.toArray()[0]; if (modelMaps.get(subModel) == null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java index 72232b875d8f..d9625e9f5656 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java @@ -28,6 +28,7 @@ import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -40,10 +41,9 @@ import java.io.File; import java.util.*; -import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf; import static org.openapitools.codegen.utils.ModelUtils.hasOneOf; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -610,10 +610,10 @@ private void prefixEnumUnknownDefaultCase(CodegenModel model) { } // Prefix only the fallback name so user-defined enum values keep their existing generated names. - Map fallbackEnumVar = (Map) enumVars.get(enumVars.size() - 1); - Object fallbackName = fallbackEnumVar.get(ENUM_NAME); + EnumVarMap fallbackEnumVar = (EnumVarMap) enumVars.get(enumVars.size() - 1); + Object fallbackName = fallbackEnumVar.getEnumName(); if (fallbackName instanceof String) { - fallbackEnumVar.put(ENUM_NAME, model.classname.toUpperCase(Locale.ROOT) + "_" + fallbackName); + fallbackEnumVar.setEnumName(model.classname.toUpperCase(Locale.ROOT) + "_" + fallbackName); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java index d43a6505eea0..acb40b97d0fb 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/HaskellHttpClientCodegen.java @@ -27,6 +27,7 @@ import org.apache.commons.text.StringEscapeUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -41,7 +42,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.CamelizeOption.UPPERCASE_FIRST_CHAR; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; @@ -1412,8 +1412,8 @@ private void updateAllowableValuesNames(String paramNameType, Map enumVar : getEnumVars(allowableValues)) { - enumVar.put(ENUM_NAME, paramNameType + enumVar.get(ENUM_NAME)); + for (EnumVarMap enumVar : getEnumVars(allowableValues)) { + enumVar.setEnumName(paramNameType + enumVar.getEnumName()); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFExtServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFExtServerCodegen.java index 75c38bd4a1a9..ffa2a934b4f0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFExtServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFExtServerCodegen.java @@ -26,6 +26,7 @@ import org.apache.commons.text.StringEscapeUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.languages.features.CXFExtServerFeatures; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -47,7 +48,6 @@ import java.text.SimpleDateFormat; import java.util.*; -import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; @@ -666,13 +666,13 @@ private boolean appendRandomEnum(StringBuilder buffer, CodegenOperation op, Code boolean usingEnumLiteral = false; String definingClass = (String) var.varVendorExtensions.get("x-defining-class"); if (definingClass != null) { - List> enumVars = getEnumVars(var.allowableValues); + List enumVars = getEnumVars(var.allowableValues); if (enumVars != null) { if (!loadTestDataFromFile) { - Map randomEnumVar = enumVars.get(i); + EnumVarMap randomEnumVar = enumVars.get(i); // NOTE: to disambiguate identically named inner enums, qualify enum name with defining class. buffer.append(definingClass).append('.').append(var.enumName).append('.') - .append(randomEnumVar.get(ENUM_NAME)); + .append(randomEnumVar.getEnumName()); op.imports.add(definingClass); } usingEnumLiteral = true; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 35ffe6710be7..4a252d8f796a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -31,11 +31,13 @@ import org.openapitools.codegen.meta.features.DocumentationFeature; import org.openapitools.codegen.meta.features.GlobalFeature; import org.openapitools.codegen.meta.features.SecurityFeature; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; import org.openapitools.codegen.templating.mustache.CaseFormatLambda; +import org.openapitools.codegen.utils.EnumUtils; import org.openapitools.codegen.utils.ProcessUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -1235,10 +1237,10 @@ public ModelsMap postProcessModels(ModelsMap objs) { if (StringUtils.isNotEmpty(var.defaultValue)) { // has default value String defaultValue = var.defaultValue.substring(var.defaultValue.lastIndexOf('.') + 1); - for (Map enumVars : (List>) var.getAllowableValues().get(ENUM_VARS)) { - if (defaultValue.equals(enumVars.get(ENUM_NAME))) { + for (EnumVarMap enumVars : EnumUtils.getEnumVars(var.allowableValues)) { + if (defaultValue.equals(enumVars.getEnumName())) { // update default to use the string directly instead of enum string - var.defaultValue = (String) enumVars.get(ENUM_VALUE); + var.defaultValue = (String) enumVars.getEnumValue(); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java index 2a628d7f6c25..cf286b79ed12 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java @@ -29,9 +29,11 @@ import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.DocumentationFeature; import org.openapitools.codegen.meta.features.GlobalFeature; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationsMap; +import org.openapitools.codegen.utils.EnumUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -412,10 +414,10 @@ public ModelsMap postProcessModels(ModelsMap objs) { if (StringUtils.isNotEmpty(var.defaultValue)) { // has default value String defaultValue = var.defaultValue.substring(var.defaultValue.lastIndexOf('.') + 1); - for (Map enumVars : (List>) var.getAllowableValues().get(ENUM_VARS)) { - if (defaultValue.equals(enumVars.get(ENUM_NAME))) { + for (EnumVarMap enumVars : EnumUtils.getEnumVars(var.getAllowableValues())) { + if (defaultValue.equals(enumVars.getEnumName())) { // update default to use the string directly instead of enum string - var.defaultValue = (String) enumVars.get(ENUM_VALUE); + var.defaultValue = (String) enumVars.getEnumValue(); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 3344db943a5b..2133145a608b 100755 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -58,9 +58,6 @@ import org.openapitools.codegen.templating.mustache.ReplaceAllLambda; import static java.util.Collections.sort; -import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; -import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; -import static org.openapitools.codegen.utils.EnumUtils.hasEnumVars; /** *

Mustache templates are located in diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/MysqlSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/MysqlSchemaCodegen.java index 8b8445f5fb84..624eee109469 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/MysqlSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/MysqlSchemaCodegen.java @@ -31,7 +31,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.StringUtils.underscore; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java index 366f1e04be50..a27c1edca6cc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java @@ -23,6 +23,7 @@ import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -37,8 +38,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUE; -import static org.openapitools.codegen.CodegenConstants.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.EnumUtils.hasEnumVars; @@ -259,14 +258,14 @@ private void stripQuotesFromIntegerEnumValues(Map allowableValue return; } - List> enumVars = getEnumVars(allowableValues); - for (Map enumVar : enumVars) { - Object value = enumVar.get(ENUM_VALUE); + List enumVars = getEnumVars(allowableValues); + for (EnumVarMap enumVar : enumVars) { + Object value = enumVar.getEnumValue(); if (value instanceof String) { String strValue = (String) value; // Remove surrounding quotes if present if (strValue.startsWith("\"") && strValue.endsWith("\"")) { - enumVar.put(ENUM_VALUE, strValue.substring(1, strValue.length() - 1)); + enumVar.setEnumValue(strValue.substring(1, strValue.length() - 1)); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java index a6500d64398a..c3b8cf8afc94 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/OCamlClientCodegen.java @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -41,8 +42,7 @@ import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.capitalize; -import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_VALUES; import static org.openapitools.codegen.utils.ModelUtils.hasAnyOf; import static org.openapitools.codegen.utils.ModelUtils.hasOneOf; import static org.openapitools.codegen.utils.StringUtils.escape; @@ -812,13 +812,13 @@ private Map allowableValues(String valueString) { return result; } - private List> buildEnumValues(String valueString) { - List> result = new ArrayList<>(); + private List buildEnumValues(String valueString) { + List result = new ArrayList<>(); for (String v : valueString.split(",")) { - Map m = new HashMap<>(); + EnumVarMap m = new EnumVarMap(); String value = v.isEmpty() ? "empty" : v; - m.put(ENUM_NAME, value); + m.setEnumName(value); m.put("camlEnumValueName", ocamlizeEnumValue(value)); result.add(m); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PostgresqlSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PostgresqlSchemaCodegen.java index 20f2d480ec58..4bbaa58f8911 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PostgresqlSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PostgresqlSchemaCodegen.java @@ -33,7 +33,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.StringUtils.underscore; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java index 5aaae1749747..f108f515d648 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ProtobufSchemaCodegen.java @@ -32,6 +32,7 @@ import org.openapitools.codegen.meta.features.DocumentationFeature; import org.openapitools.codegen.meta.features.SecurityFeature; import org.openapitools.codegen.meta.features.WireFormatFeature; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; @@ -48,7 +49,7 @@ import com.google.common.base.CaseFormat; -import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.model.EnumVarMap.*; import static org.openapitools.codegen.utils.EnumUtils.*; import static org.openapitools.codegen.utils.ModelUtils.*; import static org.openapitools.codegen.utils.StringUtils.*; @@ -570,12 +571,12 @@ public void preprocessOpenAPI(OpenAPI openAPI) { */ public void addEnumValuesPrefix(Map allowableValues, String prefix) { if (hasEnumVars(allowableValues)) { - List> enumVars = getEnumVars(allowableValues); + List enumVars = getEnumVars(allowableValues); prefix = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, prefix); - for (Map value : enumVars) { - String name = (String) value.get(ENUM_NAME); - value.put(ENUM_NAME, useSimplifiedEnumNames ? name : prefix + "_" + name); - value.put(ENUM_VALUE, useSimplifiedEnumNames ? name : "\"" + prefix + "_" + name + "\""); + for (EnumVarMap value : enumVars) { + String name = (String) value.getEnumName(); + value.setEnumName(useSimplifiedEnumNames ? name : prefix + "_" + name); + value.setEnumValue(useSimplifiedEnumNames ? name : "\"" + prefix + "_" + name + "\""); } } @@ -598,14 +599,12 @@ public void addUnspecifiedToAllowableValues(Map allowableValues) if (startEnumsWithUnspecified) { if (hasEnumVars(allowableValues)) { - List> enumVars = getEnumVars(allowableValues); + List enumVars = getEnumVars(allowableValues); boolean unspecifiedPresent = enumVars.stream() - .anyMatch(e -> UNSPECIFIED.equals(e.get(ENUM_NAME))); + .anyMatch(e -> UNSPECIFIED.equals(e.getEnumName())); if (!unspecifiedPresent) { - HashMap unspecifiedEnum = new HashMap<>(); - unspecifiedEnum.put(ENUM_NAME, UNSPECIFIED); - unspecifiedEnum.put(ENUM_IS_STRING, false); - unspecifiedEnum.put(ENUM_VALUE, "\"" + UNSPECIFIED + "\""); + EnumVarMap unspecifiedEnum = new EnumVarMap(); + unspecifiedEnum.enumVar(UNSPECIFIED, "\"" + UNSPECIFIED + "\"", false); enumVars.add(0, unspecifiedEnum); } } @@ -626,9 +625,9 @@ public void addUnspecifiedToAllowableValues(Map allowableValues) * * @param enumVars list of enum vars */ - public void addEnumIndexes(List> enumVars) { + public void addEnumIndexes(List enumVars) { int enumIndex = 0; - for (Map enumVar : enumVars) { + for (EnumVarMap enumVar : enumVars) { enumVar.put("protobuf-enum-index", enumIndex); enumIndex++; } @@ -734,7 +733,7 @@ public ModelsMap postProcessModels(ModelsMap objs) { addUnspecifiedToAllowableValues(allowableValues); addEnumValuesPrefix(allowableValues, cm.getClassname()); if (hasEnumVars(allowableValues)) { - List> enumVars = getEnumVars(allowableValues); + List enumVars = getEnumVars(allowableValues); addEnumIndexes(enumVars); } } @@ -790,7 +789,7 @@ public ModelsMap postProcessModels(ModelsMap objs) { addEnumValuesPrefix(enumProperty.allowableValues, enumProperty.getEnumName()); if (hasEnumVars(enumProperty.allowableValues)) { - List> enumVars = getEnumVars(enumProperty.allowableValues); + List enumVars = getEnumVars(enumProperty.allowableValues); addEnumIndexes(enumVars); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java index 07e391610887..6a3481fad6f4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java @@ -28,6 +28,7 @@ import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; +import org.openapitools.codegen.model.EnumVarMap; import org.openapitools.codegen.utils.ModelUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +38,6 @@ import java.io.Writer; import java.util.*; -import static org.openapitools.codegen.CodegenConstants.*; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -784,8 +784,8 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap> enumVars = getEnumVars(codegenModel.allowableValues); - return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).get(ENUM_NAME); + List enumVars = getEnumVars(codegenModel.allowableValues); + return moduleName + "::" + codegenModel.classname + "::" + enumVars.get(0).getEnumName(); } else if (codegenModel.oneOf != null && !codegenModel.oneOf.isEmpty()) { String subModel = (String) codegenModel.oneOf.toArray()[0]; if (modelMaps.containsKey(subModel)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java index 161400d9b83b..324ee344646a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java @@ -1652,10 +1652,10 @@ public ModelsMap postProcessModels(ModelsMap objs) { additionalProperties.put("apiUsesIntegerEnums", true); // Add numeric discriminant values for enum variants - List> enumVars = getEnumVars(model.allowableValues); + List enumVars = getEnumVars(model.allowableValues); if (enumVars != null) { - for (Map enumVar : enumVars) { + for (EnumVarMap enumVar : enumVars) { String value = (String) enumVar.get("value"); if (value != null) { // Strip quotes to get raw numeric value diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java index c576549b78c5..da8396404481 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java @@ -31,7 +31,6 @@ import java.util.*; -import static org.openapitools.codegen.CodegenConstants.ENUM_VALUES; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumValues; import static org.openapitools.codegen.utils.StringUtils.camelize; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java index 716f29004a03..bc7473f9f861 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptFetchClientCodegen.java @@ -46,8 +46,7 @@ import java.util.stream.Collectors; import static java.util.Objects.nonNull; -import static org.openapitools.codegen.CodegenConstants.ENUM_NAME; -import static org.openapitools.codegen.CodegenConstants.ENUM_VARS; +import static org.openapitools.codegen.model.EnumVarMap.ENUM_VARS; import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER; import static org.openapitools.codegen.utils.EnumUtils.getEnumVars; import static org.openapitools.codegen.utils.OnceLogger.once; @@ -606,7 +605,7 @@ private void autoSetDefaultValueForProperty(ExtendedCodegenProperty var) { var.defaultValue = "false"; } else { if (var.allowableValues != null && var.allowableValues.get(ENUM_VARS) instanceof ArrayList && ((ArrayList) var.allowableValues.get(ENUM_VARS)).get(0) instanceof HashMap) { - var.defaultValue = var.dataTypeAlternate + "." + getEnumVars(var.allowableValues).get(0).get(ENUM_NAME); + var.defaultValue = var.dataTypeAlternate + "." + getEnumVars(var.allowableValues).get(0).getEnumName(); } } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/model/EnumVarMap.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/model/EnumVarMap.java new file mode 100644 index 000000000000..40726a647aec --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/model/EnumVarMap.java @@ -0,0 +1,68 @@ +package org.openapitools.codegen.model; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class EnumVarMap extends HashMap { + + // The raw enum values from the OpenAPI specification + public static final String ENUM_VALUES = "values"; + // The map that stores all enum values and their metadata (name, value, enumDescription...) + public static final String ENUM_VARS = "enumVars"; + // The name of the enum, for example NAME("value") in Java + public static final String ENUM_NAME = "name"; + // The on-the-line value, i.e., the one present in the "values" + public static final String ENUM_VALUE = "value"; + // If the enum is typed as a string + public static final String ENUM_IS_STRING = "isString"; + // The description that should be attached to an entry in "enumVars" + public static final String ENUM_DESCRIPTION = "enumDescription"; + + public EnumVarMap() { + + } + + public EnumVarMap(EnumVarMap init) { + putAll(init); + } + + public EnumVarMap(Map init) { + putAll(init); + } + + public void enumVar(String enumName, String enumValue, boolean isString) { + put(ENUM_NAME, enumName); + put(ENUM_VALUE, enumValue); + put(ENUM_IS_STRING, isString); + } + + public void setEnumName(String name) { + put(ENUM_NAME, name); + } + + public Object getEnumName() { + return get(ENUM_NAME); + } + + public void setEnumValue(String value) { + put(ENUM_VALUE, value); + } + + public Object getEnumValue() { + return get(ENUM_VALUE); + } + + public void isString(boolean isString) { + put(ENUM_IS_STRING, isString); + } + + public boolean isString() { + Object value = get(ENUM_IS_STRING); + if (!(value instanceof Boolean)) { + throw new IllegalStateException(ENUM_IS_STRING + " is not a boolean: " + value); + } + return (Boolean) value; + } + +} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java index 79acc0386584..314660c6a01f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/EnumUtils.java @@ -2,12 +2,14 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.Schema; -import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.model.EnumVarMap; import java.util.*; import java.util.stream.Collectors; -import static org.openapitools.codegen.CodegenConstants.*; +import static org.openapitools.codegen.CodegenConstants.X_ENUM_DEPRECATED; +import static org.openapitools.codegen.CodegenConstants.X_ENUM_DESCRIPTIONS; +import static org.openapitools.codegen.model.EnumVarMap.*; public class EnumUtils { @@ -22,7 +24,7 @@ public class EnumUtils { /** * * @param allowableValues The allowableValues map - * @return whether the allowableValues map contains {@value CodegenConstants#ENUM_VARS} + * @return whether the allowableValues map contains {@value EnumVarMap#ENUM_VARS} */ public static boolean hasEnumVars(Map allowableValues) { return allowableValues != null && allowableValues.containsKey(ENUM_VARS); @@ -31,25 +33,26 @@ public static boolean hasEnumVars(Map allowableValues) { /** * * @param allowableValues The allowableValues map - * @return whether the allowableValues map contains {@value CodegenConstants#ENUM_VALUES} + * @return whether the allowableValues map contains {@value EnumVarMap#ENUM_VALUES} */ public static boolean hasEnumValues(Map allowableValues) { return allowableValues != null && allowableValues.containsKey(ENUM_VALUES); } /** - * Get the {@value CodegenConstants#ENUM_VARS} from the allowableValues map. + * Get the {@value EnumVarMap#ENUM_VARS} from the allowableValues map. + * * @param allowableValues The allowableValues map * @return the list of enumVars */ - public static List> getEnumVars(Map allowableValues) { + public static List getEnumVars(Map allowableValues) { @SuppressWarnings("unchecked") - List> enumVars = (List>) allowableValues.get(ENUM_VARS); + List enumVars = (List) allowableValues.get(ENUM_VARS); return enumVars; } /** - * Get the {@value CodegenConstants#ENUM_VALUES} from the allowableValues map. + * Get the {@value EnumVarMap#ENUM_VALUES} from the allowableValues map. * @param allowableValues The allowableValues map * @return the list of enumValues */ @@ -60,7 +63,7 @@ public static List getEnumValues(Map allowableValues) { } /** - * Get the {@value CodegenConstants#ENUM_VALUES} from the allowableValues map. + * Get the {@value EnumVarMap#ENUM_VALUES} from the allowableValues map. * @param allowableValues The allowableValues map * @return the list of enumValues */