summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index 17eb68f..163410c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -330,7 +330,10 @@ public class JavaTransient0Generator implements Generator {
) {
return switch (statement) {
case TypedEnumDefinitionNode enumDefinition -> {
+ var enumJavaTypeRef = this.javaGenerator.generateTypeRef(enumDefinition.type());
var ordinal = JavaIdentifier.of("ordinal");
+ var enumValues = JavaIdentifier.of(this.javaGenerator.generateTypeName(enumDefinition.type().name()).value() + "$values");
+
yield Stream.of(
generateEncodeMethod(
enumDefinition.type(),
@@ -343,17 +346,25 @@ public class JavaTransient0Generator implements Generator {
NativeTypes.INT_32
))
),
+
+ new JavaFieldDeclaration(
+ JavaVisibility.PRIVATE,
+ JavaMemberKind.STATIC,
+ JavaTypeRef.array(enumJavaTypeRef),
+ enumValues,
+ Optional.of(new JavaStaticMethodCall(
+ enumJavaTypeRef,
+ JavaIdentifier.of("values"),
+ List.of()
+ ))
+ ),
+
generateDecodeMethod(
enumDefinition.type(),
new JavaBlock(Stream.concat(
generateDecode(ordinal, NativeTypes.INT_32).stream(),
Stream.of(new JavaReturn(new JavaArrayAccess(
- // TODO: avoid duplicating array each time
- new JavaStaticMethodCall(
- this.javaGenerator.generateTypeRef(enumDefinition.type()),
- JavaIdentifier.of("values"),
- List.of()
- ),
+ new JavaRef(enumValues),
new JavaRef(ordinal)
)))
).toList())