summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-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
4 files changed, 26 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 {
+}