@@ -497,6 +497,12 @@ abstract class Element2 {
497497 /// The analysis session in which this element is defined.
498498 AnalysisSession ? get session;
499499
500+ /// Uses the given [visitor] to visit this element.
501+ ///
502+ /// Returns the value returned by the visitor as a result of visiting this
503+ /// element.
504+ T ? accept2 <T >(ElementVisitor2 <T > visitor);
505+
500506 /// The presentation of this element as it should appear when presented to
501507 /// users.
502508 ///
@@ -535,6 +541,71 @@ abstract class Element2 {
535541 ///
536542 /// Returns `null` if there is no such element.
537543 E ? thisOrAncestorOfType2 <E extends Element2 >();
544+
545+ /// Uses the given [visitor] to visit all of the children of this element.
546+ /// There is no guarantee of the order in which the children will be visited.
547+ void visitChildren2 <T >(ElementVisitor2 <T > visitor);
548+ }
549+
550+ /// An object that can be used to visit an element structure.
551+ ///
552+ /// Clients may not extend, implement or mix-in this class. There are classes
553+ /// that implement this interface that provide useful default behaviors in
554+ /// `package:analyzer/dart/element/visitor.dart` . A couple of the most useful
555+ /// include
556+ /// * SimpleElementVisitor which implements every visit method by doing nothing,
557+ /// * RecursiveElementVisitor which will cause every node in a structure to be
558+ /// visited, and
559+ /// * ThrowingElementVisitor which implements every visit method by throwing an
560+ /// exception.
561+ abstract class ElementVisitor2 <R > {
562+ R ? visitClassElement (ClassElement2 element);
563+
564+ R ? visitConstructorElement (ConstructorElement2 element);
565+
566+ R ? visitEnumElement (EnumElement2 element);
567+
568+ R ? visitExtensionElement (ExtensionElement2 element);
569+
570+ R ? visitExtensionTypeElement (ExtensionTypeElement2 element);
571+
572+ R ? visitFieldElement (FieldElement2 element);
573+
574+ R ? visitFieldFormalParameterElement (FieldFormalParameterElement2 element);
575+
576+ R ? visitFormalParameterElement (FormalParameterElement element);
577+
578+ R ? visitGenericFunctionTypeElement (GenericFunctionTypeElement2 element);
579+
580+ R ? visitGetterElement (GetterElement element);
581+
582+ R ? visitLabelElement (LabelElement2 element);
583+
584+ R ? visitLibraryElement (LibraryElement2 element);
585+
586+ R ? visitLocalFunctionElement (LocalFunctionElement element);
587+
588+ R ? visitLocalVariableElement (LocalVariableElement2 element);
589+
590+ R ? visitMethodElement (MethodElement2 element);
591+
592+ R ? visitMixinElement (MixinElement2 element);
593+
594+ R ? visitMultiplyDefinedElement (MultiplyDefinedElement2 element);
595+
596+ R ? visitPrefixElement (PrefixElement2 element);
597+
598+ R ? visitSetterElement (SetterElement element);
599+
600+ R ? visitSuperFormalParameterElement (SuperFormalParameterElement2 element);
601+
602+ R ? visitTopLevelFunctionElement (TopLevelFunctionElement element);
603+
604+ R ? visitTopLevelVariableElement (TopLevelVariableElement2 element);
605+
606+ R ? visitTypeAliasElement (TypeAliasElement2 element);
607+
608+ R ? visitTypeParameterElement (TypeParameterElement2 element);
538609}
539610
540611/// An element that represents an enum.
0 commit comments