OpenAPITools / OpenAPITools/openapi-generator
[BUG] Java enum values are messed up
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Description
When enum values are parsed with the Java parser, they get messed up in the generated code.
For example:
- "R2D2" becomes "R2_D2" in Java code
- "U2F" becomes "U2_F" in Java code
openapi-generator version
Version 7.8.0
Suggested fix
This bug has been introduced with https://github.com/OpenAPITools/openapi-generator/pull/18338
AbstractJavaCodeGen.java, line 1913:
@Override
public String toEnumVarName(String value, String datatype) {
if (enumNameMapping.containsKey(value)) {
return enumNameMapping.get(value);
}
if (value.length() == 0) {
return "EMPTY";
}
// for symbol, e.g. $, #
if (getSymbolName(value) != null) {
return getSymbolName(value).toUpperCase(Locale.ROOT);
}
if (" ".equals(value)) {
return "SPACE";
}
// number
if ("Integer".equals(datatype) || "Long".equals(datatype) ||
"Float".equals(datatype) || "Double".equals(datatype) || "BigDecimal".equals(datatype)) {
String varName = "NUMBER_" + value;
varName = varName.replaceAll("-", "MINUS_");
varName = varName.replaceAll("\\+", "PLUS_");
varName = varName.replaceAll("\\.", "_DOT_");
return varName;
}
// string
String var = value.replaceAll("\\W+", "_").toUpperCase(Locale.ROOT);
if (var.matches("\\d.*")) {
var = "_" + var;
}
return this.toVarName(var); <----------------Should be changed to "return var;"
}
Related issues/PRs
https://github.com/OpenAPITools/openapi-generator/pull/18338
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in AbstractJavaCodeGen.java around the toEnumVarName method and review the change introduced by pull request 18338. Verify the behavior with enum values such as R2D2 and U2F; done means generated Java enum names preserve those values without inserting underscores.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, openapi
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100