blob: a1b274509b5337fd83719c6414a7830a9f856e58 [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.
library visitor;
import 'elements.dart';
import '../closure.dart'
show 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 visitParameterElement(ParameterElement e) => visitVariableElement(e);
R visitFormalElement(FormalElement e) => visitElement(e);
R visitFieldElement(FieldElement e) => visitVariableElement(e);
R visitFieldParameterElement(InitializingFormalElement e) =>
visitParameterElement(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) {
return visitClassElement(e);
}
R visitEnumClassElement(EnumClassElement e) => visitClassElement(e);
R visitTypeVariableElement(TypeVariableElement e) => visitElement(e);
R visitBoxFieldElement(BoxFieldElement e) => visitElement(e);
R visitClosureClassElement(ClosureClassElement e) => visitClassElement(e);
R visitClosureFieldElement(ClosureFieldElement e) => visitVariableElement(e);
}