From 7df6bc37bfac33770b9758647ab73822d807f0fe Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 11 Feb 2016 20:52:41 +0000 Subject: Implement static fields and static constructors for C# --- .../java/org/zwobble/couscous/ast/ClassNodeBuilder.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java') 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 fields; + private List staticConstructor; private Optional constructor; private final ImmutableList.Builder 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 body) { + this.staticConstructor = body; + return this; + } + private MethodBuilder 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()); } -- cgit v1.2.3