blob: 6223fa0c9192fbe64be4d5efa2637f2e1d0f6d06 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.google.dart.compiler.ast;
import java.util.List;
/**
* A visitor for abstract syntax tree.
*
* <pre>
*
* public R visitArrayAccess(DartArrayAccess node) {
* // Actions before visiting subnodes.
* node.visitChildren(this);
* // Actions after visiting subnodes.
* return node;
* }
* </pre>
*
* <p>
* In addition, this visitor takes advantage of the AST-node class hierarchy and makes it easy to
* perform an action for, for example, all statements:
*
* <pre>
*
* public R visitStatement(DartStatement node) {
* // Action that must be performed for all statements.
* }
* </pre>
*/
public class ASTVisitor<R> {
public R visitNode(DartNode node) {
node.visitChildren(this);
return null;
}
public R visitNodeWithMetadata(DartNodeWithMetadata node) {
return visitNode(node);
}
public R visitDirective(DartDirective node) {
return visitNodeWithMetadata(node);
}
public R visitInvocation(DartInvocation node) {
return visitExpression(node);
}
public R visitExportDirective(DartExportDirective node) {
return visitDirective(node);
}
public R visitExpression(DartExpression node) {
return visitNode(node);
}
public R visitStatement(DartStatement node) {
return visitNode(node);
}
public R visitLiteral(DartLiteral node) {
return visitExpression(node);
}
public R visitGotoStatement(DartGotoStatement node) {
return visitStatement(node);
}
public R visitSwitchMember(DartSwitchMember node) {
return visitNode(node);
}
public R visitDeclaration(DartDeclaration<?> node) {
return visitNodeWithMetadata(node);
}
public R visitClassMember(DartClassMember<?> node) {
return visitDeclaration(node);
}
public R visitComment(DartComment node) {
return visitNode(node);
}
public R visitCommentNewName(DartCommentNewName node) {
return visitNode(node);
}
public R visitCommentRefName(DartCommentRefName node) {
return visitNode(node);
}
public R visitAnnotation(DartAnnotation node) {
return visitNode(node);
}
public R visitArrayAccess(DartArrayAccess node) {
return visitExpression(node);
}
public R visitArrayLiteral(DartArrayLiteral node) {
return visitTypedLiteral(node);
}
public R visitBinaryExpression(DartBinaryExpression node) {
return visitExpression(node);
}
public R visitBlock(DartBlock node) {
return visitStatement(node);
}
public R visitReturnBlock(DartReturnBlock node) {
return visitBlock(node);
}
public R visitBooleanLiteral(DartBooleanLiteral node) {
return visitLiteral(node);
}
public R visitAssertStatement(DartAssertStatement node) {
return visitStatement(node);
}
public R visitBreakStatement(DartBreakStatement node) {
return visitGotoStatement(node);
}
public R visitFunctionObjectInvocation(DartFunctionObjectInvocation node) {
return visitInvocation(node);
}
public R visitMethodInvocation(DartMethodInvocation node) {
return visitInvocation(node);
}
public R visitUnqualifiedInvocation(DartUnqualifiedInvocation node) {
return visitInvocation(node);
}
public R visitSuperConstructorInvocation(DartSuperConstructorInvocation node) {
return visitInvocation(node);
}
public R visitCascadeExpression(DartCascadeExpression node) {
return visitExpression(node);
}
public R visitCase(DartCase node) {
return visitSwitchMember(node);
}
public R visitClass(DartClass node) {
return visitDeclaration(node);
}
public R visitConditional(DartConditional node) {
return visitExpression(node);
}
public R visitContinueStatement(DartContinueStatement node) {
return visitGotoStatement(node);
}
public R visitDefault(DartDefault node) {
return visitSwitchMember(node);
}
public R visitDoubleLiteral(DartDoubleLiteral node) {
return visitLiteral(node);
}
public R visitDoWhileStatement(DartDoWhileStatement node) {
return visitStatement(node);
}
public R visitEmptyStatement(DartEmptyStatement node) {
return visitStatement(node);
}
public R visitExprStmt(DartExprStmt node) {
return visitStatement(node);
}
public R visitField(DartField node) {
return visitClassMember(node);
}
public R visitFieldDefinition(DartFieldDefinition node) {
return visitNodeWithMetadata(node);
}
public R visitForInStatement(DartForInStatement node) {
return visitStatement(node);
}
public R visitForStatement(DartForStatement node) {
return visitStatement(node);
}
public R visitFunction(DartFunction node) {
return visitNode(node);
}
public R visitFunctionExpression(DartFunctionExpression node) {
return visitExpression(node);
}
public R visitFunctionTypeAlias(DartFunctionTypeAlias node) {
return visitDeclaration(node);
}
public R visitClassTypeAlias(DartClassTypeAlias node) {
return visitDeclaration(node);
}
public R visitIdentifier(DartIdentifier node) {
return visitExpression(node);
}
public R visitIfStatement(DartIfStatement node) {
return visitStatement(node);
}
public R visitImportCombinator(ImportCombinator node) {
return visitNode(node);
}
public R visitImportDirective(DartImportDirective node) {
return visitDirective(node);
}
public R visitImportHideCombinator(ImportHideCombinator node) {
return visitImportCombinator(node);
}
public R visitImportShowCombinator(ImportShowCombinator node) {
return visitImportCombinator(node);
}
public R visitInitializer(DartInitializer node) {
return visitNode(node);
}
public R visitIntegerLiteral(DartIntegerLiteral node) {
return visitLiteral(node);
}
public R visitLabel(DartLabel node) {
return visitStatement(node);
}
public R visitLibraryDirective(DartLibraryDirective node) {
return visitDirective(node);
}
public R visitTypedLiteral(DartTypedLiteral node) {
return visitExpression(node);
}
public R visitMapLiteral(DartMapLiteral node) {
return visitTypedLiteral(node);
}
public R visitMapLiteralEntry(DartMapLiteralEntry node) {
return visitNode(node);
}
public R visitMethodDefinition(DartMethodDefinition node) {
return visitClassMember(node);
}
public R visitNativeDirective(DartNativeDirective node) {
return visitDirective(node);
}
public R visitNewExpression(DartNewExpression node) {
return visitInvocation(node);
}
public R visitNullLiteral(DartNullLiteral node) {
return visitLiteral(node);
}
public R visitParameter(DartParameter node) {
return visitDeclaration(node);
}
public R visitParameterizedTypeNode(DartParameterizedTypeNode node) {
return visitExpression(node);
}
public R visitParenthesizedExpression(DartParenthesizedExpression node) {
return visitExpression(node);
}
public R visitPartOfDirective(DartPartOfDirective node) {
return visitDirective(node);
}
public R visitPropertyAccess(DartPropertyAccess node) {
return visitExpression(node);
}
public R visitTypeNode(DartTypeNode node) {
return visitNode(node);
}
public R visitReturnStatement(DartReturnStatement node) {
return visitStatement(node);
}
public R visitSourceDirective(DartSourceDirective node) {
return visitDirective(node);
}
public R visitStringLiteral(DartStringLiteral node) {
return visitLiteral(node);
}
public R visitStringInterpolation(DartStringInterpolation node) {
return visitLiteral(node);
}
public R visitSuperExpression(DartSuperExpression node) {
return visitExpression(node);
}
public R visitSwitchStatement(DartSwitchStatement node) {
return visitStatement(node);
}
public R visitSyntheticErrorExpression(DartSyntheticErrorExpression node) {
return visitExpression(node);
}
public R visitSyntheticErrorIdentifier(DartSyntheticErrorIdentifier node) {
return visitIdentifier(node);
}
public R visitSyntheticErrorStatement(DartSyntheticErrorStatement node) {
return visitStatement(node);
}
public R visitThisExpression(DartThisExpression node) {
return visitExpression(node);
}
public R visitThrowExpression(DartThrowExpression node) {
return visitExpression(node);
}
public R visitCatchBlock(DartCatchBlock node) {
return visitStatement(node);
}
public R visitTryStatement(DartTryStatement node) {
return visitStatement(node);
}
public R visitUnaryExpression(DartUnaryExpression node) {
return visitExpression(node);
}
public R visitUnit(DartUnit node) {
return visitNode(node);
}
public R visitVariable(DartVariable node) {
return visitDeclaration(node);
}
public R visitVariableStatement(DartVariableStatement node) {
return visitStatement(node);
}
public R visitWhileStatement(DartWhileStatement node) {
return visitStatement(node);
}
public void visit(List<? extends DartNode> nodes) {
if (nodes != null) {
for (DartNode node : nodes) {
node.accept(this);
}
}
}
public R visitNamedExpression(DartNamedExpression node) {
return visitExpression(node);
}
public R visitTypeExpression(DartTypeExpression node) {
return visitExpression(node);
}
public R visitTypeParameter(DartTypeParameter node) {
return visitDeclaration(node);
}
public R visitNativeBlock(DartNativeBlock node) {
return visitBlock(node);
}
public R visitRedirectConstructorInvocation(DartRedirectConstructorInvocation node) {
return visitInvocation(node);
}
}