diff options
Diffstat (limited to 'src/main/java/org')
3 files changed, 42 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java index ef1ca5e..0627a6b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java @@ -1,6 +1,13 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; public sealed interface UntypedNamespaceStatementNode permits org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode, org.zwobble.hobgoblin.compiler.ast.untyped.UntypedStructDefinitionNode, org.zwobble.hobgoblin.compiler.ast.untyped.UntypedSumDefinitionNode { + public interface Builder { + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode build(); + + // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode.Builder body + } + // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode body // Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode body } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java index 3884c1f..c2e484c 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java @@ -1,6 +1,13 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; public sealed interface UntypedTypeLevelExpressionNode permits org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelReferenceNode, org.zwobble.hobgoblin.compiler.ast.untyped.UntypedConstructedTypeNode { + public interface Builder { + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode build(); + + // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode.Builder body + } + // Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode body // Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode body } 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 867ba23..5af408c 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 @@ -143,7 +143,24 @@ public class JavaTypesGenerator implements Generator { sumDefinition.variants().stream() .map(variant -> generateTypeRef(variant.type(), context)) .toList(), - List.of(), + List.of( + new JavaInterfaceDeclaration( + BUILDER_TYPE_NAME, + JavaInterfaceDeclaration.Openness.OPEN, + List.of(), + List.of( + new JavaMethodDeclaration( + "build", + JavaMethodKind.INSTANCE, + generateTypeRef(sumDefinition.type(), context), + List.of(), + Optional.empty() + ) + ), + JavaCustomArea.type(generateBuilderTypeRef(sumDefinition.type()), "body"), + DocComment.EMPTY + ) + ), JavaCustomArea.type(generateTypeRef(sumDefinition.type(), context), "body"), sumDefinition.docComment() ) @@ -308,8 +325,16 @@ public class JavaTypesGenerator implements Generator { } private JavaTypeRef generateBuilderTypeRef(StructType type) { - var javaPackage = namespaceToJavaPackageParts(type.namespaceName()); - return JavaTypeRef.inner(javaPackage, type.name(), BUILDER_TYPE_NAME); + return generateBuilderTypeRef(type.namespaceName(), type.name()); + } + + private JavaTypeRef generateBuilderTypeRef(SumType type) { + return generateBuilderTypeRef(type.namespaceName(), type.name()); + } + + private JavaTypeRef generateBuilderTypeRef(NamespaceName namespaceName, String name) { + var javaPackage = namespaceToJavaPackageParts(namespaceName); + return JavaTypeRef.inner(javaPackage, name, BUILDER_TYPE_NAME); } private JavaExpression arbitraryValue( |
