summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-18 23:48:33 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-18 23:49:02 +0100
commit4e8d3aa3f1ec9372e97098d0c247ef104edfb012 (patch)
treedbaf62e7f334b3273727e2929e09ba73ea635dfb /src
parent0d3b69afbda09e5140b05b8bb57100338da6c6c0 (diff)
Add build method to builders
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java14
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java8
-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/JavaRef.java4
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java9
5 files changed, 35 insertions, 2 deletions
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().<JavaExpression>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 {
+}
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 833b88a..531a7ff 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
@@ -305,6 +305,15 @@ public class JavaWriterTests {
}
@Test
+ public void ref() throws IOException {
+ var java = new JavaRef("x");
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("x"));
+ }
+
+ @Test
public void typeRefWithoutArgsHasNoAngleBrackets() throws IOException {
var java = JavaTypeRef.topLevel(List.of("abc", "def"), "One");