aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index f1240f6..a4a268a 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -4,22 +4,26 @@ import com.google.common.collect.ImmutableList;
import org.zwobble.couscous.ast.identifiers.Identifier;
import org.zwobble.couscous.values.UnitValue;
+import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import static java.util.Collections.emptySet;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class ClassNodeBuilder {
private final TypeName name;
private final ImmutableList.Builder<FieldDeclarationNode> fields;
+ private List<StatementNode> staticConstructor;
private Optional<ConstructorNode> constructor;
private final ImmutableList.Builder<MethodNode> methods;
public ClassNodeBuilder(TypeName name) {
this.name = name;
this.fields = ImmutableList.builder();
+ staticConstructor = list();
this.constructor = Optional.empty();
this.methods = ImmutableList.builder();
}
@@ -28,6 +32,10 @@ public class ClassNodeBuilder {
this(TypeName.of(name));
}
+ public ClassNodeBuilder staticField(String name, TypeName type) {
+ return field(FieldDeclarationNode.staticField(name, type));
+ }
+
public ClassNodeBuilder field(String name, TypeName type) {
return field(FieldDeclarationNode.field(name, type));
}
@@ -46,6 +54,11 @@ public class ClassNodeBuilder {
return constructor(build.apply(constructorBuilder()).build());
}
+ public ClassNodeBuilder staticConstructor(List<StatementNode> body) {
+ this.staticConstructor = body;
+ return this;
+ }
+
private MethodBuilder<ConstructorNode> constructorBuilder() {
return new MethodBuilder<>(builder ->
ConstructorNode.constructor(
@@ -86,6 +99,7 @@ public class ClassNodeBuilder {
name,
emptySet(),
fields.build(),
+ staticConstructor,
constructor.orElse(ConstructorNode.DEFAULT),
methods.build());
}