diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-29 09:31:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-29 09:31:51 +0100 |
| commit | 29563953f767d049d152a42e2da5a50bf377fad2 (patch) | |
| tree | b08e55ee40207f82fd5e43fe6ff11b6dbdbc9ed5 /src | |
| parent | 0559249e215564b9c3f2c804247bb8c67fb7bef8 (diff) | |
Add (unescaped) Java string literals
Diffstat (limited to 'src')
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"), |
