Skip to content
This repository was archived by the owner on Aug 17, 2025. It is now read-only.

Commit bd0bc72

Browse files
fix: enums should be upper camel case (#5661)
1 parent 152620d commit bd0bc72

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

jvm-runtime/ftl-runtime/common/deployment/src/main/java/xyz/block/ftl/deployment/ModuleBuilder.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1368,14 +1368,24 @@ private Decl extractValueEnum(ClassInfo classInfo, Class<?> clazz, Visibility vi
13681368
valueBuilder.setStringValue(StringValue.newBuilder().setValue(aString).build());
13691369
}
13701370
EnumVariant variant = EnumVariant.newBuilder()
1371-
.setName(constant.toString())
1371+
.setName(upperSnakeToLowerCamel(constant.toString()))
13721372
.setValue(valueBuilder)
13731373
.build();
13741374
enumBuilder.addVariants(variant);
13751375
}
13761376
return Decl.newBuilder().setEnum(enumBuilder).build();
13771377
}
13781378

1379+
private static String upperSnakeToLowerCamel(String snakeStr) {
1380+
String[] components = snakeStr.toLowerCase().split("_");
1381+
StringBuilder camelCase = new StringBuilder();
1382+
for (var i : components) {
1383+
camelCase.append(i.substring(0, 1).toUpperCase())
1384+
.append(i.substring(1));
1385+
}
1386+
return camelCase.toString();
1387+
}
1388+
13791389
private record TypeEnum(Decl decl, Map<String, Class<?>> variantClasses, List<Class<?>> holders) {
13801390
}
13811391

jvm-runtime/ftl-runtime/java/deployment/src/test/java/xyz/block/ftl/kotlin/deployment/test/enums/ValueEnumSchemaExtractionTest.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,29 @@ public void testEnumSchema() throws Exception {
2929
var e = module.getDeclsList().stream().filter(Decl::hasEnum).findFirst().orElseThrow();
3030
Assertions.assertEquals("StringEnum", e.getEnum().getName());
3131
Assertions.assertEquals(2, e.getEnum().getVariantsCount());
32-
Assertions.assertEquals(true, e.getEnum().getType().hasString());
32+
Assertions.assertTrue(e.getEnum().getType().hasString());
33+
for (var i : e.getEnum().getVariantsList()) {
34+
switch (i.getName()) {
35+
case "Foo":
36+
Assertions.assertEquals("foo", i.getValue().getStringValue().getValue());
37+
break;
38+
case "FooBar":
39+
Assertions.assertEquals("fooBar", i.getValue().getStringValue().getValue());
40+
break;
41+
default:
42+
Assertions.fail("Unexpected enum variant: " + i.getName());
43+
}
44+
}
3345
}
3446

3547
@Verb
3648
public static void verb(StringEnum stringEnum) {
3749

3850
}
3951

40-
public static enum StringEnum {
52+
public enum StringEnum {
4153
FOO("foo"),
42-
BAR("bar");
54+
FOO_BAR("fooBar");
4355

4456
final String value;
4557

0 commit comments

Comments
 (0)