Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7292,17 +7292,20 @@ protected void removeEnumUnknownDefaultCase(CodegenOperation operation) {
}

protected void postProcessEnumVars(List<EnumVarMap> enumVars) {
Collections.reverse(enumVars);
enumVars.forEach(v -> {
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.getEnumName(), uniqueEnumName);
v.setEnumName(uniqueEnumName);
}
});
Collections.reverse(enumVars);
// a new name can already be taken ("EtcGmt1" + "2" is "EtcGmt12"), so repeat until names are unique
do {
Collections.reverse(enumVars);
enumVars.forEach(v -> {
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.getEnumName(), uniqueEnumName);
v.setEnumName(uniqueEnumName);
}
});
Collections.reverse(enumVars);
} while (enumVars.stream().map(EnumVarMap::getEnumName).distinct().count() < enumVars.size());
}

private String getUniqueEnumName(String name, List<EnumVarMap> enumVars) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,22 @@ public void testBuildEnumVarsPreservesRawValueAlignmentAcrossNulls() {
Assert.assertEquals(enumVars.get(1).getEnumValue(), "\"_42\"");
}

@Test
public void testPostProcessEnumVarsKeepsRenamedEntriesUnique() {
// typescript names of "Etc/GMT+12", "Etc/GMT+1", "Etc/GMT0", "Etc/GMT-1" and "Etc/GMT-12"
List<EnumVarMap> enumVars = new ArrayList<>();
for (String name : Arrays.asList("EtcGmt12", "EtcGmt1", "EtcGmt0", "EtcGmt1", "EtcGmt12")) {
EnumVarMap enumVar = new EnumVarMap();
enumVar.setEnumName(name);
enumVars.add(enumVar);
}

new DefaultCodegen().postProcessEnumVars(enumVars);

assertThat(enumVars).extracting(EnumVarMap::getEnumName)
.containsExactly("EtcGmt122", "EtcGmt1", "EtcGmt0", "EtcGmt12", "EtcGmt1222");
}

@Test(expectedExceptions = IllegalArgumentException.class)
public void testBuildEnumVarsRejectsMismatchedRawValues() {
new DefaultCodegen().buildEnumVars(Collections.singletonList("value"), "string", Collections.emptyList());
Expand Down
Loading