summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java16
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaNewExpression.java9
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java12
4 files changed, 38 insertions, 1 deletions
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 1252777..87b1aa6 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
@@ -108,6 +108,10 @@ public class JavaWriter implements AutoCloseable {
case JavaIntegerLiteral integerLiteral -> {
writeIntegerLiteral(integerLiteral);
}
+
+ case JavaNewExpression newExpression -> {
+ writeNewExpression(newExpression);
+ }
}
}
@@ -167,6 +171,18 @@ public class JavaWriter implements AutoCloseable {
this.writer.write("}");
}
+ private void writeNewExpression(JavaNewExpression newExpression) throws IOException {
+ this.writer.write("new ");
+ writeTypeRef(newExpression.type());
+ this.writer.write("(");
+ writeWithSeparator(
+ newExpression.args(),
+ this::writeExpression,
+ () -> this.writer.write(", ")
+ );
+ this.writer.write(")");
+ }
+
private void writeRecordDeclaration(JavaRecordDeclaration recordDeclaration) throws IOException {
writeDocComment(recordDeclaration.docComment());
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
index 0aa202c..e90fe4e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
@@ -1,4 +1,4 @@
package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
-public sealed interface JavaExpression permits JavaIntegerLiteral {
+public sealed interface JavaExpression permits JavaIntegerLiteral, JavaNewExpression {
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaNewExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaNewExpression.java
new file mode 100644
index 0000000..b6852bf
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaNewExpression.java
@@ -0,0 +1,9 @@
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+import java.util.List;
+
+public record JavaNewExpression(
+ JavaTypeRef type,
+ List<JavaExpression> args
+) implements JavaExpression {
+}
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 abbbeea..833b88a 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
@@ -293,6 +293,18 @@ public class JavaWriterTests {
}
@Test
+ public void newExpression() throws IOException {
+ var java = new JavaNewExpression(
+ JavaTypeRef.topLevel(List.of("one"), "Two"),
+ List.of(new JavaIntegerLiteral(1), new JavaIntegerLiteral(2))
+ );
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("new one.Two(1, 2)"));
+ }
+
+ @Test
public void typeRefWithoutArgsHasNoAngleBrackets() throws IOException {
var java = JavaTypeRef.topLevel(List.of("abc", "def"), "One");