diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-13 20:58:31 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-13 20:58:31 +0100 |
| commit | ae82aefd4ac03a5d6b87ac9aa16719a0935a91e0 (patch) | |
| tree | 7b396381177c16ed37327b7152e2c4c207888d0e /src/main/java/org | |
| parent | 11634a5c5463d10f4d6be2dce0fa8b2b04339d43 (diff) | |
Avoid creating array of enum variants when decoding each value
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 23 |
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()) |
