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