// 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.

library visitor;

import 'elements.dart';
import '../ssa/ssa.dart'
    show InterceptedElement;
import '../closure.dart'
    show ThisElement,
         BoxElement,
         BoxFieldElement,
         ClosureClassElement,
         ClosureFieldElement;

abstract class ElementVisitor<R> {
  R visit(Element e) => e.accept(this);

  R visitElement(Element e);
  R visitErroneousElement(ErroneousElement e) => visitFunctionElement(e);
  R visitWarnOnUseElement(WarnOnUseElement e) => visitElement(e);
  R visitAmbiguousElement(AmbiguousElement e) => visitElement(e);
  R visitScopeContainerElement(ScopeContainerElement e) => visitElement(e);
  R visitCompilationUnitElement(CompilationUnitElement e) => visitElement(e);
  R visitLibraryElement(LibraryElement e) => visitScopeContainerElement(e);
  R visitPrefixElement(PrefixElement e) => visitElement(e);
  R visitTypedefElement(TypedefElement e) => visitElement(e);
  R visitVariableElement(VariableElement e) => visitElement(e);
  R visitFieldParameterElement(FieldParameterElement e) => visitElement(e);
  R visitVariableListElement(VariableListElement e) => visitElement(e);
  R visitAbstractFieldElement(AbstractFieldElement e) => visitElement(e);
  R visitFunctionElement(FunctionElement e) => visitElement(e);
  R visitConstructorBodyElement(ConstructorBodyElement e) => visitElement(e);
  R visitClassElement(ClassElement e) => visitScopeContainerElement(e);
  R visitTypeDeclarationElement(TypeDeclarationElement e) => visitElement(e);
  R visitMixinApplicationElement(MixinApplicationElement e) {
    visitClassElement(e);
  }
  R visitVoidElement(VoidElement e) => visitElement(e);
  R visitLabelElement(LabelElement e) => visitElement(e);
  R visitTargetElement(TargetElement e) => visitElement(e);
  R visitTypeVariableElement(TypeVariableElement e) => visitElement(e);
  R visitInterceptedElement(InterceptedElement e) => visitElement(e);
  R visitThisElement(ThisElement e) => visitElement(e);
  R visitBoxElement(BoxElement e) => visitElement(e);
  R visitBoxFieldElement(BoxFieldElement e) => visitElement(e);
  R visitClosureClassElement(ClosureClassElement e) => visitClassElement(e);
  R visitClosureFieldElement(ClosureFieldElement e) => visitVariableElement(e);
}