From 1fd6faf0b9874e0962ab790e12b1f12fabac893e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 17:10:45 +0100 Subject: Add Java field declaration --- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 13 +++++++++++++ .../output/lang/java/ast/JavaClassBodyDeclaration.java | 2 +- .../compiler/output/lang/java/ast/JavaFieldDeclaration.java | 8 ++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldDeclaration.java (limited to 'src/main/java/org') 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 c9f62b3..2ae41bb 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 @@ -130,6 +130,10 @@ public class JavaWriter implements AutoCloseable { writeConstructorDeclaration(constructorDeclaration); } + case JavaFieldDeclaration fieldDeclaration -> { + writeFieldDeclaration(fieldDeclaration); + } + case JavaMethodDeclaration methodDeclaration -> { writeMethodDeclaration(methodDeclaration); } @@ -232,6 +236,15 @@ public class JavaWriter implements AutoCloseable { this.writer.write(fieldAccess.fieldName()); } + private void writeFieldDeclaration(JavaFieldDeclaration fieldDeclaration) throws IOException { + this.writeVisibility(fieldDeclaration.visibility()); + this.writer.write(" final "); + this.writeTypeRef(fieldDeclaration.type()); + this.writer.write(" "); + this.writer.write(fieldDeclaration.name()); + this.writer.write(";"); + } + private void writeImplements(List implementsTypes) throws IOException { if (!implementsTypes.isEmpty()) { this.writer.write("implements "); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java index 3bee614..5ce363d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java @@ -1,4 +1,4 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; -public sealed interface JavaClassBodyDeclaration permits JavaConstructorDeclaration, JavaMethodDeclaration, JavaTypeDeclaration { +public sealed interface JavaClassBodyDeclaration permits JavaConstructorDeclaration, JavaFieldDeclaration, JavaMethodDeclaration, JavaTypeDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldDeclaration.java new file mode 100644 index 0000000..14855de --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldDeclaration.java @@ -0,0 +1,8 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaFieldDeclaration( + JavaVisibility visibility, + JavaTypeRef type, + String name +) implements JavaClassBodyDeclaration { +} -- cgit v1.2.3