aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-15 11:57:28 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-15 11:57:28 +0100
commit15c67a851605262ef165279d99964ce8a53a45f5 (patch)
tree80927551aede98f3bdbfc3acc40660916f90ffe0 /src/main/java/org/zwobble/couscous/ast
parent0970f5a5074da34fffaea70f3b42d012edb501c5 (diff)
Remove StatementNodeMapper
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/IfStatementNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ReturnNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThrowNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TryNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/WhileNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeMapper.java17
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java13
10 files changed, 15 insertions, 61 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
index c32efbc..462d2aa 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.util.ExtraIterables;
public class ExpressionStatementNode implements StatementNode {
@@ -20,11 +19,6 @@ public class ExpressionStatementNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.EXPRESSION_STATEMENT;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
index 4a58251..66a2b60 100644
--- a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
@@ -2,7 +2,6 @@ package org.zwobble.couscous.ast;
import com.google.common.collect.Iterables;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.util.ExtraIterables;
import java.util.List;
@@ -41,11 +40,6 @@ public class IfStatementNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.IF_STATEMENT;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 595adb1..172fe5e 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -1,9 +1,8 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.identifiers.Identifier;
-import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
+import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.util.ExtraIterables;
import static org.zwobble.couscous.ast.TypeCoercionNode.coerce;
@@ -51,11 +50,6 @@ public class LocalVariableDeclarationNode implements VariableNode, StatementNode
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.LOCAL_VARIABLE_DECLARATION;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
index 2c6d665..28a16f8 100644
--- a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.util.ExtraIterables;
public class ReturnNode implements StatementNode {
@@ -20,11 +19,6 @@ public class ReturnNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.RETURN;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/StatementNode.java b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
index cdcd636..c18fe5d 100644
--- a/src/main/java/org/zwobble/couscous/ast/StatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
@@ -1,9 +1,7 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
public interface StatementNode extends Node {
- <T> T accept(StatementNodeMapper<T> visitor);
StatementNode transform(NodeTransformer transformer);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
index 0b273c9..23e42c7 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.util.ExtraIterables;
public class ThrowNode implements StatementNode {
@@ -20,11 +19,6 @@ public class ThrowNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.THROW;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TryNode.java b/src/main/java/org/zwobble/couscous/ast/TryNode.java
index 9a61ecc..ae1890b 100644
--- a/src/main/java/org/zwobble/couscous/ast/TryNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TryNode.java
@@ -2,7 +2,6 @@ package org.zwobble.couscous.ast;
import com.google.common.collect.Iterables;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import java.util.List;
@@ -45,11 +44,6 @@ public class TryNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.TRY;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/WhileNode.java b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
index 6cd5c51..63db222 100644
--- a/src/main/java/org/zwobble/couscous/ast/WhileNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
@@ -2,7 +2,6 @@ package org.zwobble.couscous.ast;
import com.google.common.base.Objects;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.util.ExtraIterables;
import java.util.List;
@@ -29,11 +28,6 @@ public class WhileNode implements StatementNode {
}
@Override
- public <T> T accept(StatementNodeMapper<T> visitor) {
- return visitor.visit(this);
- }
-
- @Override
public int type() {
return NodeTypes.WHILE;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeMapper.java b/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeMapper.java
index 0637c44..fedbd47 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeMapper.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeMapper.java
@@ -5,6 +5,7 @@ import org.zwobble.couscous.ast.Node;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.BiFunction;
import java.util.function.Function;
import static org.zwobble.couscous.util.ExtraMaps.entry;
@@ -15,12 +16,22 @@ public class DynamicNodeMapper {
// TODO: check return type -- at the very least, check the methods are consistent.
public static <T, R> Function<Node, R> instantiate(T visitor, String methodName) {
- Map.Entry<Class<?>, String> key = entry(visitor.getClass(), methodName);
+ Function<T, Function<Node, R>> builder = buildClassSupplier(visitor.getClass(), methodName);
+ return builder.apply(visitor);
+ }
+
+ public static <T, R> BiFunction<Node, T, R> visitor(Class<T> clazz, String methodName) {
+ Function<T, Function<Node, R>> classSupplier = buildClassSupplier(clazz, methodName);
+ return (node, visitor) -> classSupplier.apply(visitor).apply(node);
+ }
+
+ private static <T> Function buildClassSupplier(Class<?> visitorClass, String methodName) {
+ Map.Entry<Class<?>, String> key = entry(visitorClass, methodName);
Function builder = VISITOR_BUILDERS.get(key);
if (builder == null) {
- builder = DynamicNodeVisitor.buildClassSupplier(visitor.getClass(), Function.class, methodName, MethodReturn.REFERENCE);
+ builder = DynamicNodeVisitor.buildClassSupplier(visitorClass, Function.class, methodName, MethodReturn.REFERENCE);
VISITOR_BUILDERS.put(key, builder);
}
- return (Function<Node, R>) builder.apply(visitor);
+ return builder;
}
}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java b/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java
deleted file mode 100644
index 5d88a60..0000000
--- a/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.zwobble.couscous.ast.visitors;
-
-import org.zwobble.couscous.ast.*;
-
-public interface StatementNodeMapper<T> {
- T visit(ReturnNode returnNode);
- T visit(ThrowNode throwNode);
- T visit(ExpressionStatementNode expressionStatement);
- T visit(LocalVariableDeclarationNode localVariableDeclaration);
- T visit(IfStatementNode ifStatement);
- T visit(WhileNode whileLoop);
- T visit(TryNode tryStatement);
-}