summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java31
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(