diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-13 21:16:42 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-13 21:16:42 +0100 |
| commit | 4ba00f412eff5f0c63371f98abcb41a82fd0819b (patch) | |
| tree | 73ab7904977c64d1f18d2171070db5edfad1d910 /src/main/java/org | |
| parent | 6756656acae5f2c4fff4a84fe877fcc1c7e271b7 (diff) | |
Generate fields on Java interface for sum fields
Diffstat (limited to 'src/main/java/org')
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 } |
