aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/Node.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-15 15:31:09 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-15 15:31:09 +0000
commitbacc781ea755d3771e1c8d09e1fbfd873872f750 (patch)
treec4b4fbfa93fbaa79afaae77bb9978f6ad0ba15bf /src/main/java/org/zwobble/couscous/ast/Node.java
parent549099039ef76a04ed524448c070a0c5328c52b2 (diff)
Allow descendants of nodes to be traversed
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/Node.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Node.java126
1 files changed, 125 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/Node.java b/src/main/java/org/zwobble/couscous/ast/Node.java
index acde931..7c4d347 100644
--- a/src/main/java/org/zwobble/couscous/ast/Node.java
+++ b/src/main/java/org/zwobble/couscous/ast/Node.java
@@ -1,7 +1,131 @@
package org.zwobble.couscous.ast;
+import org.zwobble.couscous.ast.visitors.NodeMapper;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
public interface Node {
- void accept(NodeVisitor visitor);
+ default void accept(NodeVisitor visitor) {
+ accept(new NodeMapper<Void>() {
+ @Override
+ public Void visit(LiteralNode literal) {
+ visitor.visit(literal);
+ return null;
+ }
+
+ @Override
+ public Void visit(VariableReferenceNode variableReference) {
+ visitor.visit(variableReference);
+ return null;
+ }
+
+ @Override
+ public Void visit(ThisReferenceNode reference) {
+ visitor.visit(reference);
+ return null;
+ }
+
+ @Override
+ public Void visit(AssignmentNode assignment) {
+ visitor.visit(assignment);
+ return null;
+ }
+
+ @Override
+ public Void visit(TernaryConditionalNode ternaryConditional) {
+ visitor.visit(ternaryConditional);
+ return null;
+ }
+
+ @Override
+ public Void visit(MethodCallNode methodCall) {
+ visitor.visit(methodCall);
+ return null;
+ }
+
+ @Override
+ public Void visit(StaticMethodCallNode staticMethodCall) {
+ visitor.visit(staticMethodCall);
+ return null;
+ }
+
+ @Override
+ public Void visit(ConstructorCallNode call) {
+ visitor.visit(call);
+ return null;
+ }
+
+ @Override
+ public Void visit(FieldAccessNode fieldAccess) {
+ visitor.visit(fieldAccess);
+ return null;
+ }
+
+ @Override
+ public Void visit(ReturnNode returnNode) {
+ visitor.visit(returnNode);
+ return null;
+ }
+
+ @Override
+ public Void visit(ExpressionStatementNode expressionStatement) {
+ visitor.visit(expressionStatement);
+ return null;
+ }
+
+ @Override
+ public Void visit(LocalVariableDeclarationNode localVariableDeclaration) {
+ visitor.visit(localVariableDeclaration);
+ return null;
+ }
+
+ @Override
+ public Void visit(IfStatementNode ifStatement) {
+ visitor.visit(ifStatement);
+ return null;
+ }
+
+ @Override
+ public Void visit(WhileNode whileLoop) {
+ visitor.visit(whileLoop);
+ return null;
+ }
+
+ @Override
+ public Void visit(FormalArgumentNode formalArgumentNode) {
+ visitor.visit(formalArgumentNode);
+ return null;
+ }
+
+ @Override
+ public Void visit(AnnotationNode annotation) {
+ visitor.visit(annotation);
+ return null;
+ }
+
+ @Override
+ public Void visit(MethodNode methodNode) {
+ visitor.visit(methodNode);
+ return null;
+ }
+
+ @Override
+ public Void visit(ConstructorNode constructorNode) {
+ visitor.visit(constructorNode);
+ return null;
+ }
+
+ @Override
+ public Void visit(FieldDeclarationNode declaration) {
+ visitor.visit(declaration);
+ return null;
+ }
+
+ @Override
+ public Void visit(ClassNode classNode) {
+ visitor.visit(classNode);
+ return null;
+ }
+ });
+ }
+ <T> T accept(NodeMapper<T> visitor);
}