summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-12 17:07:14 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-12 17:07:14 +0100
commit028a39cd60dbb1f912031a9e9e958f35ba7a2781 (patch)
tree798c8962df77b5958bf1ae807bc548062361e06b
parent51e6a77431e2321cf1878752d715cfc4011327b1 (diff)
Add Java field access
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java10
-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/JavaFieldAccess.java7
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java12
4 files changed, 30 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 8fbdacc..c9f62b3 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
@@ -183,6 +183,10 @@ public class JavaWriter implements AutoCloseable {
writeAssignment(assignment);
}
+ case JavaFieldAccess fieldAccess -> {
+ writeFieldAccess(fieldAccess);
+ }
+
case JavaIntegerLiteral integerLiteral -> {
writeIntegerLiteral(integerLiteral);
}
@@ -222,6 +226,12 @@ public class JavaWriter implements AutoCloseable {
this.writer.write(";");
}
+ private void writeFieldAccess(JavaFieldAccess fieldAccess) throws IOException {
+ this.writeExpression(fieldAccess.receiver());
+ this.writer.write(".");
+ this.writer.write(fieldAccess.fieldName());
+ }
+
private void writeImplements(List<JavaTypeRef> implementsTypes) throws IOException {
if (!implementsTypes.isEmpty()) {
this.writer.write("implements ");
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 195441b..f2d5f45 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 JavaAssignment, JavaIntegerLiteral, JavaMethodCall, JavaNewExpression, JavaNullLiteral, JavaRef, JavaStaticFieldAccess, JavaStaticMethodCall, JavaStringLiteral {
+public sealed interface JavaExpression permits JavaAssignment, JavaFieldAccess, JavaIntegerLiteral, JavaMethodCall, JavaNewExpression, JavaNullLiteral, JavaRef, JavaStaticFieldAccess, JavaStaticMethodCall, JavaStringLiteral {
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java
new file mode 100644
index 0000000..e213121
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java
@@ -0,0 +1,7 @@
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+public record JavaFieldAccess(
+ JavaExpression receiver,
+ String fieldName
+) 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 14feaaa..6819760 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
@@ -738,6 +738,18 @@ public class JavaWriterTests {
}
@Test
+ public void fieldAccess() throws IOException {
+ var java = new JavaFieldAccess(
+ new JavaRef("one"),
+ "two"
+ );
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("one.two"));
+ }
+
+ @Test
public void staticFieldAccess() throws IOException {
var java = new JavaStaticFieldAccess(
JavaTypeRef.topLevel(List.of("one"), "Two"),