diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java | 14 |
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()); } |
