Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Unified Diff: pkg/analyzer/lib/dart/element/visitor.dart

Issue 2623453003: Add visitors that throw by default (Closed)
Patch Set: rework implementation Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/dart/element/visitor.dart
diff --git a/pkg/analyzer/lib/dart/element/visitor.dart b/pkg/analyzer/lib/dart/element/visitor.dart
index 185357dd1e83c44157637fcaa36b48c1376fc467..40d0817c134cd77d915d40289c455bb911567568 100644
--- a/pkg/analyzer/lib/dart/element/visitor.dart
+++ b/pkg/analyzer/lib/dart/element/visitor.dart
@@ -82,7 +82,7 @@ import 'package:analyzer/dart/element/element.dart';
* do so will cause the visit methods for superclasses of the element to not be
* invoked and will cause the children of the visited node to not be visited.
*
- * Clients may extend or implement this class.
+ * Clients may extend this class.
*/
class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
@override
@@ -189,7 +189,7 @@ class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
* children. Failure to do so will cause the children of the visited element to
* not be visited.
*
- * Clients may extend or implement this class.
+ * Clients may extend this class.
*/
class RecursiveElementVisitor<R> implements ElementVisitor<R> {
@override
@@ -313,7 +313,7 @@ class RecursiveElementVisitor<R> implements ElementVisitor<R> {
* mechanism (and hence don't need to recursively visit a whole structure) and
* that only need to visit a small number of element types.
*
- * Clients may extend or implement this class.
+ * Clients may extend this class.
*/
class SimpleElementVisitor<R> implements ElementVisitor<R> {
@override
@@ -374,3 +374,81 @@ class SimpleElementVisitor<R> implements ElementVisitor<R> {
@override
R visitTypeParameterElement(TypeParameterElement element) => null;
}
+
+/**
+ * An AST visitor that will throw an exception if any of the visit methods that
+ * are invoked have not been overridden. It is intended to be a superclass for
+ * classes that implement the visitor pattern and need to override all of the
+ * visit methods.
+ *
+ * Clients may extend this class.
+ */
+class ThrowingElementVisitor<R> implements ElementVisitor<R> {
+ @override
+ R visitClassElement(ClassElement element) => _throw(element);
+
+ @override
+ R visitCompilationUnitElement(CompilationUnitElement element) =>
+ _throw(element);
+
+ @override
+ R visitConstructorElement(ConstructorElement element) => _throw(element);
+
+ @override
+ R visitExportElement(ExportElement element) => _throw(element);
+
+ @override
+ R visitFieldElement(FieldElement element) => _throw(element);
+
+ @override
+ R visitFieldFormalParameterElement(FieldFormalParameterElement element) =>
+ _throw(element);
+
+ @override
+ R visitFunctionElement(FunctionElement element) => _throw(element);
+
+ @override
+ R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) =>
+ _throw(element);
+
+ @override
+ R visitImportElement(ImportElement element) => _throw(element);
+
+ @override
+ R visitLabelElement(LabelElement element) => _throw(element);
+
+ @override
+ R visitLibraryElement(LibraryElement element) => _throw(element);
+
+ @override
+ R visitLocalVariableElement(LocalVariableElement element) => _throw(element);
+
+ @override
+ R visitMethodElement(MethodElement element) => _throw(element);
+
+ @override
+ R visitMultiplyDefinedElement(MultiplyDefinedElement element) =>
+ _throw(element);
+
+ @override
+ R visitParameterElement(ParameterElement element) => _throw(element);
+
+ @override
+ R visitPrefixElement(PrefixElement element) => _throw(element);
+
+ @override
+ R visitPropertyAccessorElement(PropertyAccessorElement element) =>
+ _throw(element);
+
+ @override
+ R visitTopLevelVariableElement(TopLevelVariableElement element) =>
+ _throw(element);
+
+ @override
+ R visitTypeParameterElement(TypeParameterElement element) => _throw(element);
+
+ R _throw(Element element) {
+ throw new Exception(
+ 'Missing implementation of visit${element.runtimeType}');
+ }
+}
« pkg/analyzer/lib/dart/element/element.dart ('K') | « pkg/analyzer/lib/dart/element/element.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698