diff options
Diffstat (limited to 'src/main')
2 files changed, 19 insertions, 5 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 827cab9..3187b27 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 @@ -223,15 +223,27 @@ public class JavaTypesGenerator implements Generator { TypedSumDefinitionNode sumDefinition, Context context ) { + var body = new ArrayList<JavaClassBodyDeclaration>(); + body.add(generateSumDefinitionBuilder(sumDefinition, context)); + + for (var field : sumDefinition.fields()) { + body.add(new JavaMethodDeclaration( + field.name(), + JavaVisibility.PUBLIC, + JavaMethodKind.INSTANCE, + generateTypeRef(field.type().value(), context), + List.of(), + Optional.empty() + )); + } + return new JavaInterfaceDeclaration( sumDefinition.name(), JavaInterfaceOpenness.SEALED, sumDefinition.variants().stream() .map(variant -> generateTypeRef(variant.type(), context)) .toList(), - List.of( - generateSumDefinitionBuilder(sumDefinition, context) - ), + body, JavaCustomArea.forType(generateTypeRef(sumDefinition.type(), context), "body"), sumDefinition.docComment() ); 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 1824efc..b4c5d49 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 @@ -10,8 +10,10 @@ public sealed interface JavaTypeDeclaration permits org.zwobble.hobgoblin.compil // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration.Builder body } + public String name(); + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCustomArea customArea(); + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration body - String name(); - JavaCustomArea customArea(); // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeDeclaration body } |
