|
26 | 26 |
|
27 | 27 | import java.util.ArrayList;
|
28 | 28 | import java.util.Collections;
|
| 29 | +import java.util.HashSet; |
29 | 30 | import java.util.LinkedHashSet;
|
30 | 31 | import java.util.List;
|
31 | 32 | import java.util.Locale;
|
@@ -96,16 +97,27 @@ public GeneratorResult generateJava() {
|
96 | 97 | .setBody(new BlockStmt().addStatement(new ReturnStmt(VALUE)));
|
97 | 98 | getValue.addAnnotation("com.fasterxml.jackson.annotation.JsonValue");
|
98 | 99 |
|
99 |
| - for (String k : this.values) { |
100 |
| - String constantName; |
| 100 | + Set<String> constantNames = new HashSet<>(values.size()); |
| 101 | + for (String k : values) { |
| 102 | + StringBuilder constantNameBuilder = new StringBuilder(); |
101 | 103 | try {
|
102 | 104 | // If the value can be parsed as an Integer
|
103 | 105 | Integer.valueOf(k);
|
104 | 106 | // Prepend
|
105 |
| - constantName = "V_" + sanitizeEnumEntry(sanitizeString(k)); |
| 107 | + constantNameBuilder.append("V_" + sanitizeEnumEntry(sanitizeString(k))); |
106 | 108 | } catch (Exception e) {
|
107 |
| - constantName = sanitizeEnumEntry(sanitizeString(k)); |
| 109 | + constantNameBuilder.append(sanitizeEnumEntry(sanitizeString(k))); |
108 | 110 | }
|
| 111 | + // enums with colliding names are bad practice, we should make sure that the resulting code compiles, |
| 112 | + // but we don't need fancy heuristics for the naming let's just prepend an underscore until it works |
| 113 | + while (constantNames.contains(constantNameBuilder.toString())) { |
| 114 | + String tmp = constantNameBuilder.toString(); |
| 115 | + constantNameBuilder.setLength(0); |
| 116 | + constantNameBuilder.append("_" + tmp); |
| 117 | + } |
| 118 | + String constantName = constantNameBuilder.toString(); |
| 119 | + constantNames.add(constantName); |
| 120 | + |
109 | 121 | String originalName = AbstractJSONSchema2Pojo.escapeQuotes(k);
|
110 | 122 | Expression valueArgument = new StringLiteralExpr(originalName);
|
111 | 123 | if (!underlyingType.equals(JAVA_LANG_STRING)) {
|
|
0 commit comments