aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-11 20:52:41 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-11 20:52:41 +0000
commit7df6bc37bfac33770b9758647ab73822d807f0fe (patch)
tree21e3dc99f0c66863fc571f9304158a7638daba2b /src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
parentd403acf6e1266e73a4ed43b63032be04da2c71d8 (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.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());
}