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