diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-11 20:52:41 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-11 20:52:41 +0000 |
| commit | 7df6bc37bfac33770b9758647ab73822d807f0fe (patch) | |
| tree | 21e3dc99f0c66863fc571f9304158a7638daba2b /src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java | |
| parent | d403acf6e1266e73a4ed43b63032be04da2c71d8 (diff) | |
Implement static fields and static constructors for C#
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()); } |
