diff options
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 32 |
1 files changed, 26 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 92d36e3..9bb72a3 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 @@ -1128,8 +1128,7 @@ public class JavaTransient0Generator implements Generator { new JavaExpressionStatement(new JavaBinaryOperation( JavaBinaryOperator.ASSIGN, new JavaRef(target), - new JavaCast( - this.javaGenerator.generateTypeRef(type), + new JavaSwitchExpression( new JavaMethodCall( new JavaRef(SHARED_VALUES_NAME), JavaIdentifier.of("get"), @@ -1138,6 +1137,23 @@ public class JavaTransient0Generator implements Generator { // (This doesn't check for negatives, but get() fails for // negative values anyway.) List.of(new JavaCast(JavaTypeRef.INT, new JavaRef(id))) + ), + List.of( + new JavaSwitchRule( + new JavaCasePattern(new JavaPattern( + this.javaGenerator.generateTypeRef(type), + decodedValue + )), + new JavaBlock(List.of( + new JavaYieldStatement(new JavaRef(decodedValue)) + )) + ), + new JavaSwitchRule( + new JavaCaseDefault(), + new JavaBlock(List.of( + throwIoException("Shared value was of the wrong type") + )) + ) ) ) )) @@ -1232,15 +1248,19 @@ public class JavaTransient0Generator implements Generator { new JavaStaticFieldAccess(JavaTypeRef.INT_BOXED, JavaIdentifier.of("MAX_VALUE")) ), new JavaBlock(List.of( - new JavaThrowStatement(new JavaNewExpression( - JavaTypeRef.IO_EXCEPTION, - List.of(new JavaStringLiteral(errorMessage)) - )) + throwIoException(errorMessage) )), new JavaBlock(List.of()) ); } + private static JavaThrowStatement throwIoException(String errorMessage) { + return new JavaThrowStatement(new JavaNewExpression( + JavaTypeRef.IO_EXCEPTION, + List.of(new JavaStringLiteral(errorMessage)) + )); + } + private JavaPackageName namespaceToJavaTransient0PackageName(NamespaceName namespaceName) { return this.javaGenerator.namespaceToJavaPackageName(namespaceName).add(JavaIdentifier.of("transient0")); } |
