aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-28 19:43:34 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-28 19:43:34 +0000
commit5cda2705b321cbea53249e181921195326c5fd55 (patch)
treea04f24d41daca7d5fb27dd0368b778a6f7e5ca7d /src/main/java/org/zwobble/couscous/ast
parent05867c4658abaa0fc7ca7c0139e2cae4522e7057 (diff)
Simplify generation of anonymous classes
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/CallableNode.java1
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNode.java1
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java21
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java5
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);