diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-28 19:43:34 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-28 19:43:34 +0000 |
| commit | 5cda2705b321cbea53249e181921195326c5fd55 (patch) | |
| tree | a04f24d41daca7d5fb27dd0368b778a6f7e5ca7d /src/main/java/org/zwobble/couscous/ast | |
| parent | 05867c4658abaa0fc7ca7c0139e2cae4522e7057 (diff) | |
Simplify generation of anonymous classes
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
5 files changed, 19 insertions, 17 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/CallableNode.java b/src/main/java/org/zwobble/couscous/ast/CallableNode.java index 79d2e84..6d6fc7b 100644 --- a/src/main/java/org/zwobble/couscous/ast/CallableNode.java +++ b/src/main/java/org/zwobble/couscous/ast/CallableNode.java @@ -5,5 +5,4 @@ import java.util.List; public interface CallableNode extends Node { List<FormalArgumentNode> getArguments(); List<StatementNode> getBody(); - } diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java index c252bb3..55453f4 100644 --- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java @@ -8,7 +8,6 @@ public class ClassNode implements Node { public static ClassNodeBuilder builder(String name) { return new ClassNodeBuilder(name); } - public static ClassNode declareClass( TypeName name, List<FieldDeclarationNode> fields, diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java index 75aa5a3..5981e34 100644 --- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java +++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java @@ -13,12 +13,17 @@ public class ClassNodeBuilder { private final ImmutableList.Builder<FieldDeclarationNode> fields; private Optional<ConstructorNode> constructor; private final ImmutableList.Builder<MethodNode> methods; - - public ClassNodeBuilder(String name) { - this.name = TypeName.of(name); + + public ClassNodeBuilder(TypeName name) { + this.name = name; this.fields = ImmutableList.builder(); this.constructor = Optional.empty(); this.methods = ImmutableList.builder(); + + } + + public ClassNodeBuilder(String name) { + this(TypeName.of(name)); } public ClassNodeBuilder field(String name, TypeName type) { @@ -30,14 +35,6 @@ public class ClassNodeBuilder { return this; } - public ClassNodeBuilder callable(CallableNode callable) { - if (callable instanceof ConstructorNode) { - return constructor((ConstructorNode) callable); - } else { - return method((MethodNode) callable); - } - } - public ClassNodeBuilder constructor(ConstructorNode constructor) { this.constructor = Optional.of(constructor); return this; @@ -85,7 +82,7 @@ public class ClassNodeBuilder { return ClassNode.declareClass( name, fields.build(), - constructor.orElse(constructorBuilder().build()), + constructor.orElse(ConstructorNode.DEFAULT), methods.build()); } diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java index 2e8b85a..0d4bad8 100644 --- a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java @@ -1,11 +1,13 @@ package org.zwobble.couscous.ast; -import java.util.List; - import org.zwobble.couscous.ast.visitors.NodeMapper; -import org.zwobble.couscous.ast.visitors.NodeVisitor; + +import java.util.Collections; +import java.util.List; public class ConstructorNode implements CallableNode { + public static final ConstructorNode DEFAULT = constructor(Collections.emptyList(), Collections.emptyList()); + public static ConstructorNode constructor( List<FormalArgumentNode> arguments, List<StatementNode> body) { diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java index 3e97a36..5763b11 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableList; import org.zwobble.couscous.ast.visitors.NodeMapper; import java.util.List; +import java.util.function.Function; public class MethodNode implements CallableNode { public static Builder staticMethod(String name) { @@ -115,6 +116,10 @@ public class MethodNode implements CallableNode { return body; } + public MethodNode mapBody(Function<List<StatementNode>, List<StatementNode>> function) { + return new MethodNode(annotations, isStatic, name, arguments, function.apply(body)); + } + @Override public <T> T accept(NodeMapper<T> visitor) { return visitor.visit(this); |
