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

Unified Diff: pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart

Issue 929113002: Add SemanticVisitor to dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated and extended Created 5 years, 10 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/compiler/lib/src/resolution/semantic_visitor_mixins.dart
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
new file mode 100644
index 0000000000000000000000000000000000000000..2957ea79b14af600fe7483765956c536c88815ea
--- /dev/null
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -0,0 +1,2272 @@
+// Copyright (c) 2015, 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.
+
+part of dart2js.semantics_visitor;
+
+/// Mixin that implements all `errorX` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `errorX` methods.
+abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleError(Send node) {
+ return bulkHandleNode(node, "Error expression `$node` unhandled.");
+ }
+
+ @override
+ R errorInvalidAssert(Send node, NodeList arguments, A arg) {
+ bulkHandleError(node);
+ }
+
+ @override
+ R errorClassTypeLiteralSet(
+ SendSet node,
+ TypeConstantExpression constant,
+ Node rhs,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorDynamicTypeLiteralSet(
+ SendSet node, TypeConstantExpression constant, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalLocalVariableCompound(
+ Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, A arg) {
Johnni Winther 2015/03/04 11:59:39 Will cleanup long lines while you review.
Johnni Winther 2015/03/11 09:14:47 Done.
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalLocalVariableSet(
+ SendSet node, LocalVariableElement variable, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalParameterCompound(
+ Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalParameterSet(
+ SendSet node, ParameterElement parameter, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalStaticFieldCompound(
+ Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalStaticFieldSet(
+ SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalSuperFieldCompound(
+ Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalSuperFieldSet(
+ SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalTopLevelFieldCompound(
+ Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorFinalTopLevelFieldSet(
+ SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorLocalFunctionCompound(Send node, LocalFunctionElement function, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorLocalFunctionPostfix(Send node, LocalFunctionElement function, IncDecOperator operator, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorLocalFunctionPrefix(Send node, LocalFunctionElement function, IncDecOperator operator, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorLocalFunctionSet(SendSet node, LocalFunctionElement function, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorStaticGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorStaticSetterGet(Send node, FunctionElement setter, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorStaticSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorSuperSetterGet(Send node, FunctionElement setter, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorSuperSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTopLevelFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTopLevelGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTopLevelSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypeVariableTypeLiteralSet(SendSet node, TypeVariableElement element, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypedefTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedCompound(Send node, Element element, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedGet(Send node, Element element, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedInvoke(Send node, Element element, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedPostfix(Send node, Element element, IncDecOperator operator, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedPrefix(Send node, Element element, IncDecOperator operator, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedSet(Send node, Element element, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedSuperCompoundIndexSet(Send node, Element element, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedSuperIndexSet(Send node, Element element, Node index, Node rhs, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedSuperBinary(Send node, Element element, BinaryOperator operator, Node argument, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUnresolvedSuperUnary(Send node, UnaryOperator operator, Element element, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUndefinedBinaryExpression(Send node, Node left, Operator operator, Node right, A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorUndefinedUnaryExpression(Send node, Operator operator, Node expression, A arg) {
+ return bulkHandleError(node);
+ }
+}
+
+/// Mixin that implements all `visitXPrefix` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXPrefix`
+/// methods.
+abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandlePrefix(Send node) {
+ return bulkHandleNode(node, "Prefix expression `$node` unhandled.");
+ }
+
+ @override
+ R visitClassTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitDynamicPropertyPrefix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitDynamicTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitLocalVariablePrefix(Send node, LocalVariableElement variable, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitParameterPrefix(Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitStaticFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitStaticGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitStaticMethodSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperFieldFieldPrefix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperFieldSetterPrefix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperGetterFieldPrefix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitSuperMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitThisPropertyPrefix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitTopLevelFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralPrefix(Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+
+ @override
+ R visitTypedefTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return bulkHandlePrefix(node);
+ }
+}
+
+/// Mixin that implements all `visitXPostfix` methods of [SemanticSendVisitor]
+/// by delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXPostfix`
+/// methods.
+abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandlePostfix(Send node) {
+ return bulkHandleNode(node, "Postfix expression `$node` unhandled.");
+ }
+
+ @override
+ R visitClassTypeLiteralPostfix(Send node, TypeConstantExpression constant,
+ IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitDynamicPropertyPostfix(Send node, Node receiver,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitDynamicTypeLiteralPostfix(Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitLocalVariablePostfix(Send node, LocalVariableElement variable, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitParameterPostfix(Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitStaticFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitStaticGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitStaticMethodSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperFieldFieldPostfix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperFieldSetterPostfix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperGetterFieldPostfix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitSuperMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitThisPropertyPostfix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitTopLevelFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralPostfix(Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+
+ @override
+ R visitTypedefTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return bulkHandlePostfix(node);
+ }
+}
+
+/// Mixin that implements all `visitXCompound` methods of [SemanticSendVisitor]
+/// by delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `xCompound`
+/// methods.
+abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleCompound(Send node) {
+ return bulkHandleNode(node, "Compound assignment `$node` unhandled.");
+ }
+
+ @override
+ R visitClassTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitDynamicPropertyCompound(Send node, Node receiver, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitDynamicTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitLocalVariableCompound(Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitParameterCompound(Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitStaticFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitStaticGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitStaticMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitSuperFieldSetterCompound(Send node, FieldElement field, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitSuperGetterFieldCompound(Send node, FunctionElement getter, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitSuperGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitSuperMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitThisPropertyCompound(Send node, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitTopLevelMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+
+ @override
+ R visitTypedefTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleCompound(node);
+ }
+}
+
+/// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXInvoke`
+/// methods.
+abstract class InvokeBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleInvoke(Send node) {
+ return bulkHandleNode(node, "Invocation `$node` unhandled.");
+ }
+
+ @override
+ R visitClassTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitDynamicPropertyInvoke(Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitDynamicTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitExpressionInvoke(Send node, Node expression, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitLocalFunctionInvoke(Send node, LocalFunctionElement function, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitLocalVariableInvoke(Send node, LocalVariableElement variable, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitParameterInvoke(Send node, ParameterElement parameter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitStaticFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitStaticGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitSuperGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitThisInvoke(Send node, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitThisPropertyInvoke(Send node, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitTopLevelFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitTopLevelGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitTypedefTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleInvoke(node);
+ }
+
+ @override
+ R visitConstantInvoke(
+ Send node,
+ ConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return bulkHandleInvoke(node);
+ }
+}
+
+/// Mixin that implements all `visitXGet` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXGet`
+/// methods.
+abstract class GetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleGet(Node node) {
+ return bulkHandleNode(node, "Read `$node` unhandled.");
+ }
+
+ @override
+ R visitClassTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitDynamicPropertyGet(Send node, Node receiver, Selector selector, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitDynamicTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitParameterGet(Send node, ParameterElement parameter, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitStaticFieldGet(Send node, FieldElement field, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitSuperFieldGet(Send node, FieldElement field, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitSuperMethodGet(Send node, MethodElement method, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitThisGet(Identifier node, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitThisPropertyGet(Send node, Selector selector, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralGet(Send node, TypeVariableElement element, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitTypedefTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return bulkHandleGet(node);
+ }
+
+ @override
+ R visitConstantGet(
+ Send node,
+ TypeConstantExpression constant,
+ A arg) {
+ return bulkHandleGet(node);
+ }
+}
+
+/// Mixin that implements all `visitXSet` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXSet`
+/// methods.
+abstract class SetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleSet(Send node) {
+ return bulkHandleNode(node, "Assignment `$node` unhandled.");
+ }
+
+ @override
+ R visitDynamicPropertySet(SendSet node, Node receiver, Selector selector, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitParameterSet(SendSet node, ParameterElement parameter, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitStaticSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitThisPropertySet(SendSet node, Selector selector, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+
+ @override
+ R visitTopLevelSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ return bulkHandleSet(node);
+ }
+}
+
+/// Mixin that implements all `visitXIndexSet` methods of [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all `visitXIndexSet`
+/// methods.
+abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleIndexSet(Send node) {
+ return bulkHandleNode(node, "Index set expression `$node` unhandled.");
+ }
+
+ @override
+ R visitCompoundIndexSet(Send node, Node receiver, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleIndexSet(node);
+ }
+
+ @override
+ R visitIndexSet(Send node, Node receiver, Node index, Node rhs, A arg) {
+ return bulkHandleIndexSet(node);
+ }
+
+ @override
+ R visitSuperCompoundIndexSet(Send node, FunctionElement getter, FunctionElement setter, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleIndexSet(node);
+ }
+
+ @override
+ R visitSuperIndexSet(Send node, FunctionElement function, Node index, Node rhs, A arg) {
+ return bulkHandleIndexSet(node);
+ }
+}
+
+/// Mixin that implements all binary visitor methods in [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all binary visitor
+/// methods.
+abstract class BinaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleBinary(Send node) {
+ return bulkHandleNode(node, "Binary expression `$node` unhandled.");
+ }
+
+ @override
+ R visitBinary(Send node, Node left, BinaryOperator operator, Node right, A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
+ R visitEquals(Send node, Node left, Node right, A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
+ R visitNotEquals(Send node, Node left, Node right, A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
+ R visitSuperBinary(Send node, FunctionElement function, BinaryOperator operator, Node argument, A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
+ R visitSuperEquals(Send node, FunctionElement function, Node argument, A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
+ R visitSuperNotEquals(Send node, FunctionElement function, Node argument, A arg) {
+ return bulkHandleBinary(node);
+ }
+}
+
+/// Mixin that implements all unary visitor methods in [SemanticSendVisitor] by
+/// delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all unary visitor
+/// methods.
+abstract class UnaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleUnary(Send node) {
+ return bulkHandleNode(node, "Unary expression `$node` unhandled.");
+ }
+
+ @override
+ R visitNot(Send node, Node expression, A arg) {
+ return bulkHandleUnary(node);
+ }
+
+ @override
+ R visitSuperUnary(Send node, UnaryOperator operator,
+ FunctionElement function, A arg) {
+ return bulkHandleUnary(node);
+ }
+
+ @override
+ R visitUnary(Send node, UnaryOperator operator, Node expression, A arg) {
+ return bulkHandleUnary(node);
+ }
+}
+
+/// Mixin that implements all purely structural visitor methods in
+/// [SemanticSendVisitor] by delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for all purely structural
+/// visitor methods.
+abstract class BaseBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ @override
+ R visitAs(Send node, Node expression, DartType type, A arg) {
+ return bulkHandleNode(node, 'As cast `$node` unhandled.');
+ }
+
+ @override
+ R visitAssert(Send node, Node expression, A arg) {
+ return bulkHandleNode(node, 'Assert `$node` unhandled.');
+ }
+
+ @override
+ R visitIs(Send node, Node expression, DartType type, A arg) {
+ return bulkHandleNode(node, 'Is test `$node` unhandled.');
+ }
+
+ @override
+ R visitIsNot(Send node, Node expression, DartType type, A arg) {
+ return bulkHandleNode(node, 'Is not test `$node` unhandled.');
+ }
+
+ @override
+ R visitLogicalAnd(Send node, Node left, Node right, A arg) {
+ return bulkHandleNode(node, 'Lazy and `$node` unhandled.');
+ }
+
+ @override
+ R visitLogicalOr(Send node, Node left, Node right, A arg) {
+ return bulkHandleNode(node, 'Lazy or `$node` unhandled.');
+ }
+}
+
+/// Mixin that implements all visitor methods for `super` calls in
+/// [SemanticSendVisitor] by delegating to a bulk handler.
+///
+/// Use this mixin to provide a trivial implementation for `super` calls
+/// visitor methods.
+abstract class SuperBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R bulkHandleNode(Node node, String message);
+
+ R bulkHandleSuper(Send node) {
+ return bulkHandleNode(node, "Super call `$node` unhandled.");
+ }
+
+ @override
+ R visitSuperBinary(Send node, FunctionElement function, BinaryOperator operator, Node argument, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperCompoundIndexSet(Send node, FunctionElement getter, FunctionElement setter, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperEquals(Send node, FunctionElement function, Node argument, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldFieldPostfix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldFieldPrefix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldGet(Send node, FieldElement field, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldSetterCompound(Send node, FieldElement field, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldSetterPostfix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperFieldSetterPrefix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterFieldCompound(Send node, FunctionElement getter, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterFieldPostfix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterFieldPrefix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperIndexSet(Send node, FunctionElement function, Node index, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperMethodGet(Send node, MethodElement method, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments, Selector selector, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperNotEquals(Send node, FunctionElement function, Node argument, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ return bulkHandleSuper(node);
+ }
+
+ @override
+ R visitSuperUnary(Send node, UnaryOperator operator, FunctionElement function, A arg) {
+ return bulkHandleSuper(node);
+ }
+}
+
+/// Visitor that implements [SemanticSendVisitor] by the use of `BulkX` mixins.
+///
+/// This class is useful in itself, but shows how to use the `BulkX` mixins and
+/// tests that the union of the `BulkX` mixins implement all `visit` and `error`
+/// methods of [SemanticSendVisitor].
+class BulkVisitor<R, A> extends SemanticSendVisitor<R, A>
+ with GetBulkMixin<R, A>,
+ SetBulkMixin<R, A>,
+ ErrorBulkMixin<R, A>,
+ InvokeBulkMixin<R, A>,
+ IndexSetBulkMixin<R, A>,
+ CompoundBulkMixin<R, A>,
+ UnaryBulkMixin<R, A>,
+ BaseBulkMixin<R, A>,
+ BinaryBulkMixin<R, A>,
+ PrefixBulkMixin<R, A>,
+ PostfixBulkMixin<R, A> {
+
+ @override
+ R apply(Node node, A arg) {
+ throw new UnimplementedError("BulkVisitor.apply unimplemented");
+ }
+
+ @override
+ R bulkHandleNode(Node node, String message) {
+ throw new UnimplementedError("BulkVisitor.bulkHandleNode unimplemented");
+ }
+}
+
+/// [SemanticSendVisitor] that visits subnodes.
+class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
+ @override
+ R apply(Node node, A arg) {
+ throw new UnimplementedError("TraversalMixin.apply unimplemented");
+ }
+
+ @override
+ R errorInvalidAssert(Send node, NodeList arguments, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R errorClassTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorDynamicTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalLocalVariableCompound(Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalParameterCompound(Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalParameterSet(SendSet node, ParameterElement parameter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalStaticFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorFinalTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorLocalFunctionCompound(Send node, LocalFunctionElement function, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorLocalFunctionPostfix(Send node, LocalFunctionElement function, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R errorLocalFunctionPrefix(Send node, LocalFunctionElement function, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R errorLocalFunctionSet(SendSet node, LocalFunctionElement function, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorStaticGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorStaticSetterGet(Send node, FunctionElement setter, A arg) {
+ return null;
+ }
+
+ @override
+ R errorStaticSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R errorSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorSuperSetterGet(Send node, FunctionElement setter, A arg) {
+ return null;
+ }
+
+ @override
+ R errorSuperSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R errorTopLevelFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorTopLevelGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
+ return null;
+ }
+
+ @override
+ R errorTopLevelSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R errorTypeVariableTypeLiteralSet(SendSet node, TypeVariableElement element, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorTypedefTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitAs(Send node, Node expression, DartType type, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R visitAssert(Send node, Node expression, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R visitBinary(Send node, Node left, BinaryOperator operator, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R visitClassTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitClassTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return null;
+ }
+
+ @override
+ R visitClassTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitClassTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitClassTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitCompoundIndexSet(Send node, Node receiver, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ apply(receiver, arg);
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitConstantGet(Send node, ConstantExpression constant, A arg) {
+ return null;
+ }
+
+ @override
+ R visitConstantInvoke(Send node, ConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertyCompound(Send node, Node receiver, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, A arg) {
+ apply(receiver, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertyGet(Send node, Node receiver, Selector selector, A arg) {
+ apply(receiver, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertyInvoke(Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
+ apply(receiver, arg);
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertyPostfix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ apply(receiver, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertyPrefix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ apply(receiver, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicPropertySet(SendSet node, Node receiver, Selector selector, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return null;
+ }
+
+ @override
+ R visitDynamicTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitDynamicTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitDynamicTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitEquals(Send node, Node left, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R visitExpressionInvoke(Send node, Node expression, NodeList arguments, Selector selector, A arg) {
+ apply(expression, arg);
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitIndexSet(Send node, Node receiver, Node index, Node rhs, A arg) {
+ apply(receiver, arg);
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitIs(Send node, Node expression, DartType type, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R visitIsNot(Send node, Node expression, DartType type, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
+ return null;
+ }
+
+ @override
+ R visitLocalFunctionInvoke(Send node, LocalFunctionElement function, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitLocalVariableCompound(Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
+ return null;
+ }
+
+ @override
+ R visitLocalVariableInvoke(Send node, LocalVariableElement variable, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitLocalVariablePostfix(Send node, LocalVariableElement variable, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitLocalVariablePrefix(Send node, LocalVariableElement variable, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitLogicalAnd(Send node, Node left, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R visitLogicalOr(Send node, Node left, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R visitNot(Send node, Node expression, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R visitNotEquals(Send node, Node left, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R visitParameterCompound(Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitParameterGet(Send node, ParameterElement parameter, A arg) {
+ return null;
+ }
+
+ @override
+ R visitParameterInvoke(Send node, ParameterElement parameter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitParameterPostfix(Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitParameterPrefix(Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitParameterSet(SendSet node, ParameterElement parameter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticFieldGet(Send node, FieldElement field, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitStaticMethodSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticMethodSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitStaticSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperBinary(Send node, FunctionElement function, BinaryOperator operator, Node argument, A arg) {
+ apply(argument, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperCompoundIndexSet(Send node, FunctionElement getter, FunctionElement setter, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperEquals(Send node, FunctionElement function, Node argument, A arg) {
+ apply(argument, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperFieldFieldPostfix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldFieldPrefix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldGet(Send node, FieldElement field, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperFieldSetterCompound(Send node, FieldElement field, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperFieldSetterPostfix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperFieldSetterPrefix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperGetterFieldCompound(Send node, FunctionElement getter, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperGetterFieldPostfix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperGetterFieldPrefix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperIndexSet(Send node, FunctionElement function, Node index, Node rhs, A arg) {
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperMethodGet(Send node, MethodElement method, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitSuperNotEquals(Send node, FunctionElement function, Node argument, A arg) {
+ apply(argument, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperUnary(Send node, UnaryOperator operator, FunctionElement function, A arg) {
+ return null;
+ }
+
+ @override
+ R visitThisGet(Identifier node, A arg) {
+ return null;
+ }
+
+ @override
+ R visitThisInvoke(Send node, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitThisPropertyCompound(Send node, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitThisPropertyGet(Send node, Selector selector, A arg) {
+ return null;
+ }
+
+ @override
+ R visitThisPropertyInvoke(Send node, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitThisPropertyPostfix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ return null;
+ }
+
+ @override
+ R visitThisPropertyPrefix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, A arg) {
+ return null;
+ }
+
+ @override
+ R visitThisPropertySet(SendSet node, Selector selector, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldPostfix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldPrefix(Send node, FieldElement field, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTopLevelSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralGet(Send node, TypeVariableElement element, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralPostfix(Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTypeVariableTypeLiteralPrefix(Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTypedefTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitTypedefTypeLiteralGet(Send node, TypeConstantExpression constant, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTypedefTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R visitTypedefTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitTypedefTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R visitUnary(Send node, UnaryOperator operator, Node expression, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedCompound(Send node, Element element, AssignmentOperator operator, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedGet(Send node, Element element, A arg) {
+ return null;
+ }
+
+ @override
+ R errorUnresolvedInvoke(Send node, Element element, NodeList arguments, Selector selector, A arg) {
+ apply(arguments, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedPostfix(Send node, Element element, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R errorUnresolvedPrefix(Send node, Element element, IncDecOperator operator, A arg) {
+ return null;
+ }
+
+ @override
+ R errorUnresolvedSet(Send node, Element element, Node rhs, A arg) {
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorUndefinedBinaryExpression(Send node, Node left, Operator operator, Node right, A arg) {
+ apply(left, arg);
+ apply(right, arg);
+ return null;
+ }
+
+ @override
+ R errorUndefinedUnaryExpression(Send node, Operator operator, Node expression, A arg) {
+ apply(expression, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedSuperIndexSet(Send node, Element element, Node index, Node rhs, A arg) {
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedSuperCompoundIndexSet(Send node, Element element, Node index, AssignmentOperator operator, Node rhs, A arg) {
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedSuperBinary(Send node, Element element, BinaryOperator operator, Node argument, A arg) {
+ apply(argument, arg);
+ return null;
+ }
+
+ @override
+ R errorUnresolvedSuperUnary(Send node, UnaryOperator operator, Element element, A arg) {
+ return null;
+ }
+}
+
+/// AST visitor that visits all normal [Send] and [SendSet] nodes using the
+/// [SemanticVisitor].
+class TraversalVisitor<R, A> extends SemanticVisitor<R, A>
+ with TraversalMixin<R, A> {
+ TraversalVisitor(TreeElements elements) : super(elements);
+
+ SemanticSendVisitor<R, A> get sendVisitor => this;
+
+ R apply(Node node, A arg) {
+ node.accept(this);
+ return null;
+ }
+
+ @override
+ internalError(Spannable spannable, String message) {
+ throw new SpannableAssertionFailure(spannable, message);
+ }
+
+ @override
+ R visitNode(Node node) {
+ node.visitChildren(this);
+ return null;
+ }
+
+ @override
+ R visitNewExpression(NewExpression node) {
+ // Bypass the [Send] holding the class/constructor name.
+ return apply(node.send.argumentsNode, null);
+ }
+
+ void visitParameters(NodeList parameters) {
+
+ }
+
+ void visitInitializers(NodeList initializers) {
+ // TODO(johnniwinther): Visit subnodes of initializers.
+ }
+
+ @override
+ R visitFunctionExpression(FunctionExpression node) {
+ if (node.parameters != null) {
+ visitParameters(node.parameters);
+ }
+ if (node.initializers != null) {
+ visitInitializers(node.initializers);
+ }
+ if (node.body != null) {
+ apply(node.body, null);
+ }
+ return null;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698