summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-18 18:45:49 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-18 18:45:49 +0100
commit612ac53d6d58d0317ab5cec4f3568839ffccdc1b (patch)
treec988f11922a630f305c4d9555caf3e4b6aa8cf85
parentffdce39ec24eb2a3ada878d1dcc5f4ef361e5a2e (diff)
Add empty Builder to structs
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java25
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassBodyDeclaration.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java2
4 files changed, 24 insertions, 9 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 1259552..c4bdccc 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
@@ -1,5 +1,6 @@
package org.zwobble.hobgoblin.compiler.output.generators.javatypes;
+import org.zwobble.hobgoblin.compiler.ast.DocComment;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode;
@@ -116,16 +117,26 @@ public class JavaTypesGenerator implements Generator {
TypedStructDefinitionNode structDefinition,
HashMap<String, List<JavaTypeRef>> javaClassToImplementsType
) {
+ var components = structDefinition.fields().stream()
+ .map(field -> new JavaRecordComponent(
+ generateTypeRef(field.type()),
+ field.name()
+ ))
+ .toList();
+
return new JavaRecordDeclaration(
structDefinition.name(),
- structDefinition.fields().stream()
- .map(field -> new JavaRecordComponent(
- generateTypeRef(field.type()),
- field.name()
- ))
- .toList(),
+ components,
javaClassToImplementsType.getOrDefault(structDefinition.name(), List.of()),
- List.of(),
+ List.of(
+ new JavaRecordDeclaration(
+ "Builder",
+ components,
+ List.of(),
+ List.of(),
+ DocComment.EMPTY
+ )
+ ),
structDefinition.docComment()
);
}
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 2b2cb58..0d25a0e 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
@@ -96,6 +96,10 @@ public class JavaWriter implements AutoCloseable {
case JavaMethodDeclaration methodDeclaration -> {
writeMethodDeclaration(methodDeclaration);
}
+
+ case JavaTypeDeclaration typeDeclaration -> {
+ writeTypeDeclaration(typeDeclaration);
+ }
}
}
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 eb7a0e4..ee2a3a7 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 JavaMethodDeclaration {
+public sealed interface JavaClassBodyDeclaration permits JavaMethodDeclaration, JavaTypeDeclaration {
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java
index da6481e..2ad8967 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeDeclaration.java
@@ -1,5 +1,5 @@
package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
-public sealed interface JavaTypeDeclaration permits JavaClassDeclaration, JavaInterfaceDeclaration, JavaRecordDeclaration {
+public sealed interface JavaTypeDeclaration extends JavaClassBodyDeclaration permits JavaClassDeclaration, JavaInterfaceDeclaration, JavaRecordDeclaration {
String name();
}