From 0102779512e4475a32c95f0d84d704bcef7d38fe Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Feb 2016 14:27:28 +0000 Subject: Tidy up reading of class bodies --- .../couscous/ast/sugar/TypeDeclarationBody.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java (limited to 'src/main/java/org/zwobble/couscous/ast') diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java new file mode 100644 index 0000000..666d777 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java @@ -0,0 +1,82 @@ +package org.zwobble.couscous.ast.sugar; + +import com.google.common.collect.ImmutableList; +import org.zwobble.couscous.ast.*; + +import java.util.List; + +public class TypeDeclarationBody { + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private final ImmutableList.Builder fields = ImmutableList.builder(); + private final ImmutableList.Builder staticConstructor = ImmutableList.builder(); + private ConstructorNode constructor = ConstructorNode.DEFAULT; + private final ImmutableList.Builder methods = ImmutableList.builder(); + + private Builder() { + } + + public void field(FieldDeclarationNode field) { + fields.add(field); + } + + public void addStaticInitializer(List statements) { + staticConstructor.addAll(statements); + } + + public void addStaticInitializer(StatementNode statement) { + staticConstructor.add(statement); + } + + public void constructor(ConstructorNode constructor) { + this.constructor = constructor; + } + + public void addMethod(MethodNode method) { + this.methods.add(method); + } + + public TypeDeclarationBody build() { + return new TypeDeclarationBody( + fields.build(), + staticConstructor.build(), + constructor, + methods.build()); + } + } + + private final List fields; + private final List staticConstructor; + private final ConstructorNode constructor; + private final List methods; + + public TypeDeclarationBody( + List fields, + List staticConstructor, ConstructorNode constructor, + List methods) + { + this.fields = fields; + this.staticConstructor = staticConstructor; + this.constructor = constructor; + this.methods = methods; + } + + public List getFields() { + return fields; + } + + public List getStaticConstructor() { + return staticConstructor; + } + + public ConstructorNode getConstructor() { + return constructor; + } + + public List getMethods() { + return methods; + } +} -- cgit v1.2.3