diff options
Diffstat (limited to 'src')
7 files changed, 47 insertions, 11 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 a2db183..6c12f22 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,6 +213,7 @@ public class JavaPreciselyMatchersGenerator implements Generator { List.of(), new JavaBlock(List.of( new JavaLocalVariableDeclaration( + Optional.empty(), submatchersIdentifier, new JavaNewExpression( JavaTypeRef.arrayList(genericMatcherRef(JavaTypeArg.superType(javaStructTypeRef))), 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 02b2a3f..22ad5ae 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 @@ -288,7 +288,7 @@ public class JavaTransient0Generator implements Generator { ) { var statements = new ArrayList<JavaBlockStatement>(); - statements.add(new JavaLocalVariableDeclaration(target, new JavaIntegerLiteral(0))); + statements.add(new JavaLocalVariableDeclaration(Optional.empty(), target, new JavaIntegerLiteral(0))); Iterable<Integer> shiftBys = () -> byteIndicesInBits(bits) .iterator(); 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 aa194e8..821389f 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 @@ -295,6 +295,7 @@ public class JavaTypesGenerator implements Generator { List.of(), new JavaBlock(List.of( new JavaLocalVariableDeclaration( + Optional.empty(), javaFieldName, new JavaNewExpression( JavaTypeRef.arrayList(javaElementType), @@ -327,6 +328,7 @@ public class JavaTypesGenerator implements Generator { List.of(), new JavaBlock(List.of( new JavaLocalVariableDeclaration( + Optional.empty(), javaFieldName, new JavaNewExpression( JavaTypeRef.arrayList(javaElementType), 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 6bb86d4..dc74dd3 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 @@ -439,7 +439,13 @@ public class JavaWriter implements AutoCloseable { } private void writeLocalVariableDeclaration(JavaLocalVariableDeclaration localVariableDeclaration) throws IOException { - this.writer.write("var "); + if (localVariableDeclaration.type().isPresent()) { + this.writeTypeRef(localVariableDeclaration.type().get()); + } else { + this.writer.write("var"); + } + + this.writer.write(" "); this.writeIdentifier(localVariableDeclaration.name()); this.writer.write(" = "); this.writeTopLevelExpression(localVariableDeclaration.initializer()); 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 0993172..cf2038d 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,30 +5,38 @@ 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(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, 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(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(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); } - public record Builder(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, 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(name, initializer); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration(type, name, initializer); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withType(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef> type) { + 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 withType(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef type) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(java.util.Optional.of(type), name, initializer); } public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(name, 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 withName(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.Builder name) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(name.build(), initializer); + 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) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(name, 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.Builder initializer) { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(name, initializer.build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(type, name, 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 75a255a..5b07ecb 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 @@ -780,7 +780,20 @@ public class JavaWriterTests { } @Test - public void localVariableDeclaration() throws IOException { + public void localVariableDeclarationUsingExplicitType() throws IOException { + var java = JavaLocalVariableDeclaration.arbitrary() + .withType(JavaTypeRef.INT) + .withName(JavaIdentifier.of("count")) + .withInitializer(new JavaIntegerLiteral(42)) + .build(); + + var string = write(writer -> writer.writeBlockStatement(java)); + + assertThat(string, equalTo("int count = 42;")); + } + + @Test + public void localVariableDeclarationUsingVar() throws IOException { var java = JavaLocalVariableDeclaration.arbitrary() .withName(JavaIdentifier.of("count")) .withInitializer(new JavaIntegerLiteral(42)) 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 9c2e6ce..d36db60 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 @@ -28,6 +28,12 @@ public class JavaLocalVariableDeclarationMatcher implements org.zwobble.precisel return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.class, this.submatchers); } + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher withType(org.zwobble.precisely.Matcher<? super java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef>> type) { + 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("type", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration::type, type)); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher(submatchers); + } + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclarationMatcher withName(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier> name) { 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("name", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration::name, name)); |
