From 4ba00f412eff5f0c63371f98abcb41a82fd0819b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Jun 2026 21:16:42 +0100 Subject: Generate fields on Java interface for sum fields --- .../generators/javatypes/JavaTypesGenerator.java | 18 +++++++++++++++--- .../output/lang/java/ast/JavaTypeDeclaration.java | 6 ++++-- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'src/main/java/org') 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(); + 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 } -- cgit v1.2.3