diff options
Diffstat (limited to 'src')
7 files changed, 55 insertions, 24 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java index f6da3c1..252f421 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java @@ -213,10 +213,10 @@ public class JavaPreciselyMatchersGenerator implements Generator { new JavaLocalVariableDeclaration( Optional.empty(), submatchersIdentifier, - new JavaNewExpression( + Optional.of(new JavaNewExpression( JavaTypeRef.arrayList(genericMatcherRef(JavaTypeArg.superType(javaStructTypeRef))), List.of(new JavaFieldAccess(JavaRef.THIS, submatchersIdentifier)) - ) + )) ), new JavaExpressionStatement(new JavaMethodCall( new JavaRef(submatchersIdentifier), 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 bf53ad0..5feba05 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 @@ -178,7 +178,7 @@ public class JavaTransient0Generator implements Generator { statements.add(new JavaLocalVariableDeclaration( Optional.of(this.javaGenerator.generateTypeRef(type)), VALUE_NAME, - new JavaIntegerLiteral(0) + Optional.of(new JavaIntegerLiteral(0)) )); Iterable<Integer> shiftBys = () -> byteIndicesInBits(bits) @@ -213,14 +213,14 @@ public class JavaTransient0Generator implements Generator { statements.add(new JavaLocalVariableDeclaration( Optional.empty(), bytesVariableName, - new JavaMethodCall( + Optional.of(new JavaMethodCall( new JavaRef(VALUE_NAME), JavaIdentifier.of("getBytes"), List.of(new JavaStaticFieldAccess( JavaTypeRef.STANDARD_CHARSETS, JavaIdentifier.of("UTF_8") )) - ) + )) )); statements.addAll(generateEncode( @@ -255,12 +255,12 @@ public class JavaTransient0Generator implements Generator { statements.add(new JavaLocalVariableDeclaration( Optional.empty(), bytesVariableName, - new JavaMethodCall( + Optional.of(new JavaMethodCall( new JavaRef(INPUT_STREAM_NAME), JavaIdentifier.of("readNBytes"), // TODO: handle very long strings List.of(new JavaCast(JavaTypeRef.INT, new JavaRef(bytesLengthVariableName))) - ) + )) )); statements.add(new JavaReturn( @@ -538,11 +538,11 @@ public class JavaTransient0Generator implements Generator { return new JavaLocalVariableDeclaration( Optional.empty(), target, - new JavaStaticMethodCall( + Optional.of(new JavaStaticMethodCall( generateTransient0TypeRef(typeNamespaceName), decodeMethodName(type), List.of(new JavaRef(INPUT_STREAM_NAME)) - ) + )) ); } @@ -590,10 +590,10 @@ public class JavaTransient0Generator implements Generator { statements.add(new JavaLocalVariableDeclaration( Optional.empty(), target, - new JavaNewExpression( + Optional.of(new JavaNewExpression( JavaTypeRef.arrayList(this.javaGenerator.generateReferenceTypeRef(elementType)), List.of() - ) + )) )); var forBodyStatements = new ArrayList<JavaBlockStatement>(); @@ -610,7 +610,7 @@ public class JavaTransient0Generator implements Generator { Optional.of(new JavaLocalVariableDeclaration( Optional.of(JavaTypeRef.LONG), index, - new JavaIntegerLiteral(0) + Optional.of(new JavaIntegerLiteral(0)) )), Optional.of(new JavaBinaryOperation( JavaBinaryOperator.LESS_THAN, 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 de2596d..a008f8b 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 @@ -287,10 +287,10 @@ public class JavaTypesGenerator implements Generator { new JavaLocalVariableDeclaration( Optional.empty(), javaFieldName, - new JavaNewExpression( + Optional.of(new JavaNewExpression( JavaTypeRef.arrayList(javaElementBoxedType), List.of(new JavaFieldAccess(JavaRef.THIS, javaFieldName)) - ) + )) ), new JavaExpressionStatement(new JavaMethodCall( new JavaRef(javaFieldName), @@ -320,10 +320,10 @@ public class JavaTypesGenerator implements Generator { new JavaLocalVariableDeclaration( Optional.empty(), javaFieldName, - new JavaNewExpression( + Optional.of(new JavaNewExpression( JavaTypeRef.arrayList(javaElementBoxedType), List.of(new JavaFieldAccess(JavaRef.THIS, javaFieldName)) - ) + )) ), new JavaExpressionStatement(new JavaMethodCall( new JavaRef(javaFieldName), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java index 48b39f5..41fe29c 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java @@ -509,8 +509,10 @@ public class JavaWriter implements AutoCloseable { this.writer.write(" "); this.writeIdentifier(localVariableDeclaration.name()); - this.writer.write(" = "); - this.writeTopLevelExpression(localVariableDeclaration.initializer()); + if (localVariableDeclaration.initializer().isPresent()) { + this.writer.write(" = "); + this.writeTopLevelExpression(localVariableDeclaration.initializer().get()); + } this.writer.write(";"); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java index cf2038d..ae885b1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java @@ -5,12 +5,12 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration imports -public record JavaLocalVariableDeclaration(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> type, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { +public record JavaLocalVariableDeclaration(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> type, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), java.util.Optional.empty()); } - public record Builder(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> type, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { + public record Builder(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> type, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration build() { return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration(type, name, initializer); } @@ -31,12 +31,16 @@ public record JavaLocalVariableDeclaration(java.util.Optional<org.zwobble.hobgob return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name.build(), initializer); } - public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withInitializer(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) { + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withInitializer(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> initializer) { return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name, initializer); } + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withInitializer(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name, java.util.Optional.of(initializer)); + } + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withInitializer(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder initializer) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name, initializer.build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name, java.util.Optional.of(initializer.build())); } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder body diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java index 508321e..f768827 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java @@ -1034,6 +1034,31 @@ public class JavaWriterTests { assertThat(string, equalTo("var count = 42;")); } + @Test + public void localVariableDeclarationWithInitializer() throws IOException { + var java = JavaLocalVariableDeclaration.arbitrary() + .withName(JavaIdentifier.of("count")) + .withInitializer(new JavaIntegerLiteral(42)) + .build(); + + var string = write(writer -> writer.writeBlockStatement(java)); + + assertThat(string, equalTo("var count = 42;")); + } + + @Test + public void localVariableDeclarationWithoutInitializer() throws IOException { + var java = JavaLocalVariableDeclaration.arbitrary() + .withType(JavaTypeRef.INT) + .withName(JavaIdentifier.of("count")) + .withInitializer(Optional.empty()) + .build(); + + var string = write(writer -> writer.writeBlockStatement(java)); + + assertThat(string, equalTo("int count;")); + } + // === Returns === @Test diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclarationMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclarationMatcher.java index d36db60..a39fcd2 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclarationMatcher.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclarationMatcher.java @@ -40,7 +40,7 @@ public class JavaLocalVariableDeclarationMatcher implements org.zwobble.precisel return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher(submatchers); } - public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher withInitializer(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> initializer) { + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher withInitializer(org.zwobble.precisely.Matcher<? super java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression>> initializer) { var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration>>(this.submatchers); submatchers.add(org.zwobble.precisely.Matchers.has("initializer", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration::initializer, initializer)); return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher(submatchers); |
