diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-18 18:45:49 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-18 18:45:49 +0100 |
| commit | 612ac53d6d58d0317ab5cec4f3568839ffccdc1b (patch) | |
| tree | c988f11922a630f305c4d9555caf3e4b6aa8cf85 | |
| parent | ffdce39ec24eb2a3ada878d1dcc5f4ef361e5a2e (diff) | |
Add empty Builder to structs
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(); } |
