summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java11
-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/JavaStringLiteral.java4
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java9
4 files changed, 25 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 82c2f9b..3e1a266 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
@@ -141,6 +141,10 @@ public class JavaWriter implements AutoCloseable {
case JavaStaticMethodCall staticMethodCall -> {
writeStaticMethodCall(staticMethodCall);
}
+
+ case JavaStringLiteral stringLiteral -> {
+ writeStringLiteral(stringLiteral);
+ }
}
}
@@ -303,6 +307,13 @@ public class JavaWriter implements AutoCloseable {
this.writer.write(")");
}
+ private void writeStringLiteral(JavaStringLiteral stringLiteral) throws IOException {
+ // TODO: escaping
+ this.writer.write("\"");
+ this.writer.write(stringLiteral.value());
+ this.writer.write("\"");
+ }
+
void writeTypeRef(JavaTypeRef type) throws IOException {
writeTypeRef(type, writer::write);
}
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 63ee145..a8cb596 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, JavaMethodCall, JavaNewExpression, JavaRef, JavaStaticMethodCall {
+public sealed interface JavaExpression permits JavaIntegerLiteral, JavaMethodCall, JavaNewExpression, JavaRef, JavaStaticMethodCall, JavaStringLiteral {
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStringLiteral.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStringLiteral.java
new file mode 100644
index 0000000..28fc5d7
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaStringLiteral.java
@@ -0,0 +1,4 @@
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+public record JavaStringLiteral(String value) 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 beef2ca..2006b50 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
@@ -348,6 +348,15 @@ public class JavaWriterTests {
}
@Test
+ public void stringLiteral() throws IOException {
+ var java = new JavaStringLiteral("hello");
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("\"hello\""));
+ }
+
+ @Test
public void newExpression() throws IOException {
var java = new JavaNewExpression(
JavaTypeRef.topLevel(List.of("one"), "Two"),