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

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: Fix indents and long lines. Created 5 years, 9 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..953ee16934fee904a246b495578892bd475f1175
--- /dev/null
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -0,0 +1,3904 @@
+// 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) {
+ 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;
+ }
+}
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor.dart ('k') | pkg/compiler/lib/src/resolution/send_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698