diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-19 18:56:55 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-19 18:56:55 +0100 |
| commit | 987169b174e693e3949e5fff85527e9ffcaa2121 (patch) | |
| tree | b554f0fcdc867226181cb58b44b8b39062ee3efe /src/main/java/org/zwobble | |
| parent | cec6afb8be6b8a040a2483e621646fd6890b50c1 (diff) | |
Generate arbitrary Java value for enum
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java | 21 |
1 files changed, 16 insertions, 5 deletions
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<Type>(); 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<JavaNativeTypeConfig> nativeTypeConfig(SimpleNativeType type) { return this.javaGeneratorConfig.nativeTypeConfig(type); } @@ -443,6 +450,10 @@ public class JavaTypesGenerator implements Generator { this.typesInfo = typesInfo; } + public List<EnumVariant> enumVariants(EnumType type) { + return this.typesInfo.enumVariants(type); + } + public List<Field> fieldsOf(StructType type) { return this.typesInfo.fieldsOf(type); } @@ -451,7 +462,7 @@ public class JavaTypesGenerator implements Generator { return this.typesInfo.variantOf(type); } - public List<Type> variants(SumType type) { + public List<Type> sumVariants(SumType type) { return this.typesInfo.sumVariants(type); } } |
