From bacc781ea755d3771e1c8d09e1fbfd873872f750 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 15 Nov 2015 15:31:09 +0000 Subject: Allow descendants of nodes to be traversed --- src/main/java/org/zwobble/couscous/ast/Node.java | 126 ++++++++++++++++++++++- 1 file changed, 125 insertions(+), 1 deletion(-) (limited to 'src/main/java/org/zwobble/couscous/ast/Node.java') 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() { + @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 accept(NodeMapper visitor); } -- cgit v1.2.3