From 987169b174e693e3949e5fff85527e9ffcaa2121 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 19 Jun 2026 18:56:55 +0100 Subject: Generate arbitrary Java value for enum --- .../generators/javatypes/JavaTypesGenerator.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index bd56880..4bfda14 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -108,7 +108,7 @@ public class JavaTypesGenerator implements Generator { return new JavaEnumDeclaration( enumDefinition.name(), enumDefinition.variants().stream() - .map(variant -> new JavaEnumConstant(Casing.lowerCamelCaseToUpperCase(variant.name()))) + .map(variant -> new JavaEnumConstant(generateEnumConstantName(variant.name()))) .toList(), JavaCustomArea.forType(generateTypeRef(enumDefinition.type(), context), "body"), enumDefinition.docComment() @@ -347,7 +347,10 @@ public class JavaTypesGenerator implements Generator { } case EnumType enumType -> { - throw new UnsupportedOperationException("TODO"); + yield new JavaStaticFieldAccess( + generateTypeRef(enumType, context), + generateEnumConstantName(context.enumVariants(enumType).getFirst().name()) + ); } case SimpleNativeType simpleNativeType -> { @@ -387,7 +390,7 @@ public class JavaTypesGenerator implements Generator { var seenTypes = new HashSet(); seenTypes.add(sumType); // TODO: better error - return context.variants(sumType).stream() + return context.sumVariants(sumType).stream() .filter(variant -> isNonRecursivelyConstructable(variant, seenTypes, context)) .findFirst() .orElseThrow(); @@ -419,7 +422,7 @@ public class JavaTypesGenerator implements Generator { case SumType sumType -> { var newSeenTypes = new HashSet<>(seenTypes); newSeenTypes.add(type); - var result = context.variants(sumType).stream() + var result = context.sumVariants(sumType).stream() .anyMatch(variant -> isNonRecursivelyConstructable(variant, seenTypes, context)); yield result; } @@ -432,6 +435,10 @@ public class JavaTypesGenerator implements Generator { }; } + private static String generateEnumConstantName(String name) { + return Casing.lowerCamelCaseToUpperCase(name); + } + private Optional nativeTypeConfig(SimpleNativeType type) { return this.javaGeneratorConfig.nativeTypeConfig(type); } @@ -443,6 +450,10 @@ public class JavaTypesGenerator implements Generator { this.typesInfo = typesInfo; } + public List enumVariants(EnumType type) { + return this.typesInfo.enumVariants(type); + } + public List fieldsOf(StructType type) { return this.typesInfo.fieldsOf(type); } @@ -451,7 +462,7 @@ public class JavaTypesGenerator implements Generator { return this.typesInfo.variantOf(type); } - public List variants(SumType type) { + public List sumVariants(SumType type) { return this.typesInfo.sumVariants(type); } } -- cgit v1.2.3