| // 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); |
| } |
| } |