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/javapreciselymatchers/JavaPreciselyMatchersGenerator.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java20
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java14
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java25
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclarationMatcher.java2
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);