blob: b571e56469ed807d28f79d9be183a0da60b00e20 [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, A> {
const ElementVisitor();
R visit(Element e, A arg) => e.accept(this, arg);
R visitErroneousElement(ErroneousElement e, A arg) => null;
R visitWarnOnUseElement(WarnOnUseElement e, A arg) => null;
R visitAmbiguousElement(AmbiguousElement e, A arg) => null;
R visitCompilationUnitElement(CompilationUnitElement e, A arg) => null;
R visitLibraryElement(LibraryElement e, A arg) => null;
R visitImportElement(ImportElement e, A arg) => null;
R visitExportElement(ExportElement e, A arg) => null;
R visitPrefixElement(PrefixElement e, A arg) => null;
R visitTypedefElement(TypedefElement e, A arg) => null;
R visitVariableElement(VariableElement e, A arg) => null;
R visitParameterElement(ParameterElement e, A arg) => null;
R visitFormalElement(FormalElement e, A arg) => null;
R visitFieldElement(FieldElement e, A arg) => null;
R visitFieldParameterElement(InitializingFormalElement e, A arg) => null;
R visitAbstractFieldElement(AbstractFieldElement e, A arg) => null;
R visitMethodElement(FunctionElement e, A arg) => null;
R visitGetterElement(GetterElement e, A arg) => null;
R visitSetterElement(SetterElement e, A arg) => null;
R visitLocalFunctionElement(LocalFunctionElement e, A arg) => null;
R visitConstructorElement(ConstructorElement e, A arg) => null;
R visitConstructorBodyElement(ConstructorBodyElement e, A arg) => null;
R visitClassElement(ClassElement e, A arg) => null;
R visitMixinApplicationElement(MixinApplicationElement e, A arg) => null;
R visitEnumClassElement(EnumClassElement e, A arg) => null;
R visitTypeVariableElement(TypeVariableElement e, A arg) => null;
R visitBoxFieldElement(BoxFieldElement e, A arg) => null;
R visitClosureClassElement(ClosureClassElement e, A arg) => null;
R visitClosureFieldElement(ClosureFieldElement e, A arg) => null;
}
abstract class BaseElementVisitor<R, A> extends ElementVisitor<R, A> {
const BaseElementVisitor();
R visitElement(Element e, A arg);
@override
R visitErroneousElement(ErroneousElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitWarnOnUseElement(WarnOnUseElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitAmbiguousElement(AmbiguousElement e, A arg) {
return visitElement(e, arg);
}
R visitScopeContainerElement(ScopeContainerElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitCompilationUnitElement(CompilationUnitElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitLibraryElement(LibraryElement e, A arg) {
return visitScopeContainerElement(e, arg);
}
@override
R visitImportElement(ImportElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitExportElement(ExportElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitPrefixElement(PrefixElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitTypedefElement(TypedefElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitVariableElement(VariableElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitParameterElement(ParameterElement e, A arg) {
return visitVariableElement(e, arg);
}
@override
R visitFormalElement(FormalElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitFieldElement(FieldElement e, A arg) {
return visitVariableElement(e, arg);
}
@override
R visitFieldParameterElement(InitializingFormalElement e, A arg) {
return visitParameterElement(e, arg);
}
@override
R visitAbstractFieldElement(AbstractFieldElement e, A arg) {
return visitElement(e, arg);
}
R visitFunctionElement(FunctionElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitMethodElement(MethodElement e, A arg) {
return visitFunctionElement(e, arg);
}
@override
R visitGetterElement(GetterElement e, A arg) {
return visitFunctionElement(e, arg);
}
@override
R visitSetterElement(SetterElement e, A arg) {
return visitFunctionElement(e, arg);
}
@override
R visitLocalFunctionElement(LocalFunctionElement e, A arg) {
return visitFunctionElement(e, arg);
}
@override
R visitConstructorElement(ConstructorElement e, A arg) {
return visitFunctionElement(e, arg);
}
@override
R visitConstructorBodyElement(ConstructorBodyElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitClassElement(ClassElement e, A arg) {
return visitScopeContainerElement(e, arg);
}
R visitTypeDeclarationElement(TypeDeclarationElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitMixinApplicationElement(MixinApplicationElement e, A arg) {
return visitClassElement(e, arg);
}
@override
R visitEnumClassElement(EnumClassElement e, A arg) {
return visitClassElement(e, arg);
}
@override
R visitTypeVariableElement(TypeVariableElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitBoxFieldElement(BoxFieldElement e, A arg) {
return visitElement(e, arg);
}
@override
R visitClosureClassElement(ClosureClassElement e, A arg) {
return visitClassElement(e, arg);
}
@override
R visitClosureFieldElement(ClosureFieldElement e, A arg) {
return visitVariableElement(e, arg);
}
}