From 4e8d3aa3f1ec9372e97098d0c247ef104edfb012 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 18 May 2026 23:48:33 +0100 Subject: Add build method to builders --- .../output/generators/javatypes/JavaTypesGenerator.java | 14 +++++++++++++- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 8 ++++++++ .../compiler/output/lang/java/ast/JavaExpression.java | 2 +- .../hobgoblin/compiler/output/lang/java/ast/JavaRef.java | 4 ++++ 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRef.java (limited to 'src/main') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 2efd1ec..92c60d4 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -123,7 +123,19 @@ public class JavaTypesGenerator implements Generator { "Builder", components, List.of(), - List.of(), + List.of( + new JavaMethodDeclaration( + "build", + generateTypeRef(structDefinition.type()), + List.of(), + new JavaBlock(List.of( + new JavaReturn(new JavaNewExpression( + generateTypeRef(structDefinition.type()), + components.stream().map(component -> new JavaRef(component.name())).toList() + )) + )) + ) + ), DocComment.EMPTY ) ), 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 87b1aa6..9707ab5 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 @@ -112,6 +112,10 @@ public class JavaWriter implements AutoCloseable { case JavaNewExpression newExpression -> { writeNewExpression(newExpression); } + + case JavaRef ref -> { + writeRef(ref); + } } } @@ -229,6 +233,10 @@ public class JavaWriter implements AutoCloseable { this.writer.write("}"); } + private void writeRef(JavaRef ref) throws IOException { + this.writer.write(ref.name()); + } + private void writeReturnStatement(JavaReturn returnStatement) throws IOException { this.writer.write("return "); writeExpression(returnStatement.value()); 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 e90fe4e..03d54dd 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, JavaNewExpression { +public sealed interface JavaExpression permits JavaIntegerLiteral, JavaNewExpression, JavaRef { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRef.java new file mode 100644 index 0000000..0ccc05c --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRef.java @@ -0,0 +1,4 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaRef(String name) implements JavaExpression { +} -- cgit v1.2.3