blob: b9ebd0b92b2ecca251dc4d8e0b3ee28d5fb1a76c [file] [log] [blame]
// 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;
/// Interface for bulk handling of a [Node] in a semantic visitor.
abstract class BulkHandle<R, A> {
/// Handle [node] either regardless of semantics or to report that [node] is
/// unhandled. [message] contains a message template for the latter case:
/// Replace '#' in [message] by `node.toString()` to create a message for the
/// error.
R bulkHandleNode(Node node, String message, A arg);
}
/// 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>, BulkHandle<R, A> {
// TODO(johnniwinther): Ensure that all error methods have an
// [ErroneousElement].
R bulkHandleError(Node node, ErroneousElement error, A arg) {
return bulkHandleNode(node, "Error expression `#` unhandled.", arg);
}
@override
R errorNonConstantConstructorInvoke(NewExpression node, Element element,
DartType type, NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleError(node, null, arg);
}
@override
R errorUndefinedUnaryExpression(
Send node, Operator operator, Node expression, A arg) {
return bulkHandleError(node, null, arg);
}
@override
R errorUndefinedBinaryExpression(
Send node, Node left, Operator operator, Node right, A arg) {
return bulkHandleError(node, null, arg);
}
@override
R errorInvalidCompound(Send node, ErroneousElement error,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidGet(Send node, ErroneousElement error, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
Selector selector, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidPostfix(
Send node, ErroneousElement error, IncDecOperator operator, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidPrefix(
Send node, ErroneousElement error, IncDecOperator operator, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidSet(Send node, ErroneousElement error, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidUnary(
Send node, UnaryOperator operator, ErroneousElement error, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidEquals(Send node, ErroneousElement error, Node right, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidNotEquals(
Send node, ErroneousElement error, Node right, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidBinary(Send node, ErroneousElement error,
BinaryOperator operator, Node right, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidIndex(Send node, ErroneousElement error, Node index, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidIndexSet(
Send node, ErroneousElement error, Node index, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidCompoundIndexSet(Send node, ErroneousElement error, Node index,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidIndexSetIfNull(
SendSet node, ErroneousElement error, Node index, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
IncDecOperator operator, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
IncDecOperator operator, A arg) {
return bulkHandleError(node, error, arg);
}
@override
R errorInvalidSetIfNull(Send node, ErroneousElement error, Node rhs, A arg) {
return bulkHandleError(node, error, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandlePrefix(Send node, A arg) {
return bulkHandleNode(node, "Prefix expression `#` unhandled.", arg);
}
@override
R visitDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
R visitIfNotNullDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitIndexPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperFieldSetterPrefix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperIndexPrefix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperSetterIndexPrefix(Send node, MethodElement getter,
Element element, Node index, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperIndexPrefix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitThisPropertyPrefix(
Send node, Name name, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitClassTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitDynamicTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTypeVariableTypeLiteralPrefix(
Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTypedefTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedStaticGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitStaticMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitTopLevelMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitFinalParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitFinalStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitFinalSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitSuperMethodPrefix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitFinalTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
@override
R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePrefix(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandlePostfix(Send node, A arg) {
return bulkHandleNode(node, "Postfix expression `#` unhandled.", arg);
}
@override
R visitDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitIfNotNullDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
R visitIndexPostfix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperFieldSetterPostfix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperIndexPostfix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperSetterIndexPostfix(Send node, MethodElement getter,
Element element, Node index, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperIndexPostfix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitThisPropertyPostfix(
Send node, Name name, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitClassTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitDynamicTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTypeVariableTypeLiteralPostfix(
Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTypedefTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedStaticGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitStaticMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
R visitToplevelMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitFinalParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitFinalStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitFinalSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitSuperMethodPostfix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitFinalTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitTopLevelMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
@override
R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return bulkHandlePostfix(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleCompound(Send node, A arg) {
return bulkHandleNode(node, "Compound assignment `#` unhandled.", arg);
}
@override
R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitStaticMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperFieldSetterCompound(Send node, FieldElement field,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitThisPropertyCompound(
Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitFinalParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitFinalStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitFinalSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedStaticGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitStaticMethodCompound(Send node, MethodElement method,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitTopLevelMethodCompound(Send node, MethodElement method,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperFieldFieldCompound(Send node, FieldElement readField,
FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitSuperMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedSuperCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedSuperGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
@override
R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleCompound(node, arg);
}
}
/// Mixin that implements all `visitXSetIfNull` methods of [SemanticSendVisitor]
/// by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for all `xSetIfNull`
/// methods.
abstract class SetIfNullBulkMixin<R, A>
implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleSetIfNull(Send node, A arg) {
return bulkHandleNode(node, "If null assignment `#` unhandled.", arg);
}
@override
R visitClassTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitDynamicTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitFinalLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitFinalParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitFinalStaticFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitFinalSuperFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitFinalTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitIfNotNullDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitLocalFunctionSetIfNull(
Send node, LocalFunctionElement function, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitStaticMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitStaticMethodSetterSetIfNull(
Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
FieldElement writtenField, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperFieldSetterSetIfNull(
Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperGetterFieldSetIfNull(
Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTopLevelMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTypeVariableTypeLiteralSetIfNull(
Send node, TypeVariableElement element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitTypedefTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedStaticGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedStaticSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedTopLevelGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedTopLevelSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitIndexSetIfNull(
SendSet node, Node receiver, Node index, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
MethodElement setter, Node index, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element,
MethodElement setter, Node index, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter,
Element element, Node index, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
@override
R visitUnresolvedSuperIndexSetIfNull(
Send node, Element element, Node index, Node rhs, A arg) {
return bulkHandleSetIfNull(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleInvoke(Send node, A arg) {
return bulkHandleNode(node, "Invocation `#` unhandled.", arg);
}
@override
R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitDynamicPropertyInvoke(
Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitIfNotNullDynamicPropertyInvoke(
Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitExpressionInvoke(Send node, Node expression, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitLocalFunctionIncompatibleInvoke(
Send node,
LocalFunctionElement function,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitParameterInvoke(Send node, ParameterElement parameter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitStaticFunctionInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitStaticGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitSuperGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitThisInvoke(
Send node, NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitThisPropertyInvoke(
Send node, NodeList arguments, Selector selector, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTopLevelFunctionInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitConstantInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitUnresolvedInvoke(Send node, Element element, NodeList arguments,
Selector selector, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
Selector selector, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitStaticSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitSuperSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
@override
R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInvoke(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleGet(Node node, A arg) {
return bulkHandleNode(node, "Read `#` unhandled.", arg);
}
@override
R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitIfNotNullDynamicPropertyGet(
Send node, Node receiver, Name name, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitParameterGet(Send node, ParameterElement parameter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitStaticFieldGet(Send node, FieldElement field, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitSuperFieldGet(Send node, FieldElement field, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitSuperMethodGet(Send node, MethodElement method, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitThisGet(Identifier node, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitThisPropertyGet(Send node, Name name, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTypeVariableTypeLiteralGet(
Send node, TypeVariableElement element, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitConstantGet(Send node, ConstantExpression constant, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitUnresolvedGet(Send node, Element element, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitUnresolvedSuperGet(Send node, Element element, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitSuperSetterGet(Send node, FunctionElement setter, A arg) {
return bulkHandleGet(node, arg);
}
@override
R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
return bulkHandleGet(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleSet(Send node, A arg) {
return bulkHandleNode(node, "Assignment `#` unhandled.", arg);
}
@override
R visitDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitIfNotNullDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitLocalVariableSet(
SendSet node, LocalVariableElement variable, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitParameterSet(
SendSet node, ParameterElement parameter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitStaticSetterSet(
SendSet node, FunctionElement setter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTopLevelSetterSet(
SendSet node, FunctionElement setter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitClassTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitDynamicTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitFinalLocalVariableSet(
SendSet node, LocalVariableElement variable, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitFinalParameterSet(
SendSet node, ParameterElement parameter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitFinalStaticFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitFinalTopLevelFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitLocalFunctionSet(
SendSet node, LocalFunctionElement function, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitStaticGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTopLevelFunctionSet(
Send node, MethodElement function, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTopLevelGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTypeVariableTypeLiteralSet(
SendSet node, TypeVariableElement element, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitTypedefTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitUnresolvedSet(Send node, Element element, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
@override
R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
return bulkHandleSet(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleIndexSet(Send node, A arg) {
return bulkHandleNode(node, "Index set expression `#` unhandled.", arg);
}
@override
R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitIndexSet(SendSet node, Node receiver, Node index, Node rhs, A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitSuperCompoundIndexSet(
SendSet node,
FunctionElement getter,
FunctionElement setter,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitUnresolvedSuperGetterCompoundIndexSet(
SendSet node,
Element element,
MethodElement setter,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitUnresolvedSuperSetterCompoundIndexSet(
SendSet node,
MethodElement getter,
Element element,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitUnresolvedSuperCompoundIndexSet(SendSet node, Element element,
Node index, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitSuperIndexSet(
SendSet node, FunctionElement function, Node index, Node rhs, A arg) {
return bulkHandleIndexSet(node, arg);
}
@override
R visitUnresolvedSuperIndexSet(
SendSet node, Element element, Node index, Node rhs, A arg) {
return bulkHandleIndexSet(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleBinary(Send node, A arg) {
return bulkHandleNode(node, "Binary expression `#` unhandled.", arg);
}
@override
R visitBinary(
Send node, Node left, BinaryOperator operator, Node right, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitEquals(Send node, Node left, Node right, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitNotEquals(Send node, Node left, Node right, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitIndex(Send node, Node receiver, Node index, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitSuperBinary(Send node, FunctionElement function,
BinaryOperator operator, Node argument, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitSuperEquals(
Send node, FunctionElement function, Node argument, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitSuperNotEquals(
Send node, FunctionElement function, Node argument, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitSuperIndex(Send node, FunctionElement function, Node index, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitUnresolvedSuperBinary(Send node, FunctionElement function,
BinaryOperator operator, Node argument, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
Selector selector, A arg) {
return bulkHandleBinary(node, arg);
}
@override
R visitUnresolvedSuperIndex(
Send node, FunctionElement function, Node index, A arg) {
return bulkHandleBinary(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleUnary(Send node, A arg) {
return bulkHandleNode(node, "Unary expression `#` unhandled.", arg);
}
@override
R visitNot(Send node, Node expression, A arg) {
return bulkHandleUnary(node, arg);
}
@override
R visitSuperUnary(
Send node, UnaryOperator operator, FunctionElement function, A arg) {
return bulkHandleUnary(node, arg);
}
@override
R visitUnary(Send node, UnaryOperator operator, Node expression, A arg) {
return bulkHandleUnary(node, arg);
}
@override
R visitUnresolvedSuperUnary(
Send node, UnaryOperator operator, FunctionElement function, A arg) {
return bulkHandleUnary(node, arg);
}
}
/// 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>, BulkHandle<R, A> {
@override
R visitAs(Send node, Node expression, DartType type, A arg) {
return bulkHandleNode(node, 'As cast `#` unhandled.', arg);
}
@override
R visitIs(Send node, Node expression, DartType type, A arg) {
return bulkHandleNode(node, 'Is test `#` unhandled.', arg);
}
@override
R visitIsNot(Send node, Node expression, DartType type, A arg) {
return bulkHandleNode(node, 'Is not test `#` unhandled.', arg);
}
@override
R visitIfNull(Send node, Node left, Node right, A arg) {
return bulkHandleNode(node, 'If-null (Lazy ?? `#`) unhandled.', arg);
}
@override
R visitLogicalAnd(Send node, Node left, Node right, A arg) {
return bulkHandleNode(node, 'Lazy and `#` unhandled.', arg);
}
@override
R visitLogicalOr(Send node, Node left, Node right, A arg) {
return bulkHandleNode(node, 'Lazy or `#` unhandled.', arg);
}
@override
void previsitDeferredAccess(Send node, PrefixElement prefix, A arg) {
bulkHandleNode(node, 'Deferred access `#` unhandled.', arg);
}
}
/// 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>, BulkHandle<R, A> {
R bulkHandleSuper(Send node, A arg) {
return bulkHandleNode(node, "Super call `#` unhandled.", arg);
}
@override
R visitSuperBinary(Send node, FunctionElement function,
BinaryOperator operator, Node argument, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperCompoundIndexSet(
SendSet node,
FunctionElement getter,
FunctionElement setter,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperEquals(
Send node, FunctionElement function, Node argument, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldGet(Send node, FieldElement field, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldSetterCompound(Send node, FieldElement field,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldSetterPostfix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperFieldSetterPrefix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperIndexSet(
SendSet node, FunctionElement function, Node index, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodGet(Send node, MethodElement method, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
CallStructure callStructure, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperNotEquals(
Send node, FunctionElement function, Node argument, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitSuperUnary(
Send node, UnaryOperator operator, FunctionElement function, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperBinary(Send node, Element element,
BinaryOperator operator, Node argument, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperGet(Send node, Element element, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
Selector selector, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperIndex(Send node, Element function, Node index, A arg) {
return bulkHandleSuper(node, arg);
}
@override
R visitUnresolvedSuperUnary(
Send node, UnaryOperator operator, Element element, A arg) {
return bulkHandleSuper(node, arg);
}
}
abstract class NewBulkMixin<R, A>
implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleNew(NewExpression node, A arg) {
return bulkHandleNode(node, "Constructor invocation `#` unhandled.", arg);
}
@override
R visitAbstractClassConstructorInvoke(
NewExpression node,
ConstructorElement element,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitConstConstructorInvoke(
NewExpression node, ConstructedConstantExpression constant, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
BoolFromEnvironmentConstantExpression constant, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
IntFromEnvironmentConstantExpression constant, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
StringFromEnvironmentConstantExpression constant, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitConstructorIncompatibleInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitRedirectingGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
ConstructorElement effectiveTarget,
InterfaceType effectiveTargetType,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitUnresolvedClassConstructorInvoke(NewExpression node, Element element,
DartType type, NodeList arguments, Selector selector, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
DartType type, NodeList arguments, Selector selector, A arg) {
return bulkHandleNew(node, arg);
}
@override
R visitUnresolvedRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleNew(node, arg);
}
}
/// 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 BulkSendVisitor<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>,
SetIfNullBulkMixin<R, A>,
UnaryBulkMixin<R, A>,
BaseBulkMixin<R, A>,
BinaryBulkMixin<R, A>,
PrefixBulkMixin<R, A>,
PostfixBulkMixin<R, A>,
NewBulkMixin<R, A> {
@override
R apply(Node node, A arg) {
throw new UnimplementedError("BulkSendVisitor.apply unimplemented");
}
@override
R bulkHandleNode(Node node, String message, A arg) {
throw new UnimplementedError(
"BulkSendVisitor.bulkHandleNode unimplemented");
}
}
/// Mixin that implements all `visitXParameterDecl` and
/// `visitXInitializingFormalDecl` methods of [SemanticDeclarationVisitor]
/// by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for these methods.
abstract class ParameterBulkMixin<R, A>
implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleParameterDeclaration(VariableDefinitions node, A arg) {
return bulkHandleNode(node, "Parameter declaration `#` unhandled.", arg);
}
@override
R visitInitializingFormalDeclaration(VariableDefinitions node,
Node definition, InitializingFormalElement parameter, int index, A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
@override
R visitNamedInitializingFormalDeclaration(
VariableDefinitions node,
Node definition,
InitializingFormalElement parameter,
ConstantExpression defaultValue,
A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
@override
R visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
ParameterElement parameter, ConstantExpression defaultValue, A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
@override
R visitOptionalInitializingFormalDeclaration(
VariableDefinitions node,
Node definition,
InitializingFormalElement parameter,
ConstantExpression defaultValue,
int index,
A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
@override
R visitOptionalParameterDeclaration(
VariableDefinitions node,
Node definition,
ParameterElement parameter,
ConstantExpression defaultValue,
int index,
A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
@override
R visitParameterDeclaration(VariableDefinitions node, Node definition,
ParameterElement parameter, int index, A arg) {
return bulkHandleParameterDeclaration(node, arg);
}
}
/// Mixin that implements all `visitXConstructorDecl` methods of
/// [SemanticDeclarationVisitor] by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for these methods.
abstract class ConstructorBulkMixin<R, A>
implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleConstructorDeclaration(FunctionExpression node, A arg) {
return bulkHandleNode(node, "Constructor declaration `#` unhandled.", arg);
}
@override
R visitFactoryConstructorDeclaration(FunctionExpression node,
ConstructorElement constructor, NodeList parameters, Node body, A arg) {
return bulkHandleConstructorDeclaration(node, arg);
}
@override
R visitGenerativeConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
NodeList initializers,
Node body,
A arg) {
return bulkHandleConstructorDeclaration(node, arg);
}
@override
R visitRedirectingFactoryConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
InterfaceType redirectionType,
ConstructorElement redirectionTarget,
A arg) {
return bulkHandleConstructorDeclaration(node, arg);
}
@override
R visitRedirectingGenerativeConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
NodeList initializers,
A arg) {
return bulkHandleConstructorDeclaration(node, arg);
}
}
/// Mixin that implements all constructor initializer visitor methods of
/// [SemanticDeclarationVisitor] by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for these methods.
abstract class InitializerBulkMixin<R, A>
implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleInitializer(Node node, A arg) {
return bulkHandleNode(node, "Initializer `#` unhandled.", arg);
}
@override
R errorUnresolvedFieldInitializer(
SendSet node, Element element, Node initializer, A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R errorUnresolvedSuperConstructorInvoke(Send node, Element element,
NodeList arguments, Selector selector, A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R errorUnresolvedThisConstructorInvoke(Send node, Element element,
NodeList arguments, Selector selector, A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R visitFieldInitializer(
SendSet node, FieldElement field, Node initializer, A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R visitSuperConstructorInvoke(
Send node,
ConstructorElement superConstructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R visitImplicitSuperConstructorInvoke(FunctionExpression node,
ConstructorElement superConstructor, InterfaceType type, A arg) {
return bulkHandleInitializer(node, arg);
}
@override
R visitThisConstructorInvoke(Send node, ConstructorElement thisConstructor,
NodeList arguments, CallStructure callStructure, A arg) {
return bulkHandleInitializer(node, arg);
}
}
/// Mixin that implements all function declaration visitor methods of
/// [SemanticDeclarationVisitor] by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for these methods.
abstract class FunctionBulkMixin<R, A>
implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleFunctionDeclaration(FunctionExpression node, A arg) {
return bulkHandleNode(node, "Function declaration `#` unhandled.", arg);
}
@override
R visitAbstractGetterDeclaration(
FunctionExpression node, MethodElement getter, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitAbstractMethodDeclaration(FunctionExpression node,
MethodElement method, NodeList parameters, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitAbstractSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitClosureDeclaration(FunctionExpression node,
LocalFunctionElement closure, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitInstanceGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitInstanceMethodDeclaration(FunctionExpression node,
MethodElement method, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitInstanceSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitLocalFunctionDeclaration(FunctionExpression node,
LocalFunctionElement function, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitStaticFunctionDeclaration(FunctionExpression node,
MethodElement function, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitStaticGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitStaticSetterDeclaration(FunctionExpression node, MethodElement setter,
NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitTopLevelFunctionDeclaration(FunctionExpression node,
MethodElement function, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitTopLevelGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
@override
R visitTopLevelSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, Node body, A arg) {
return bulkHandleFunctionDeclaration(node, arg);
}
}
/// Mixin that implements all variable/field declaration visitor methods of
/// [SemanticDeclarationVisitor] by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for these methods.
abstract class VariableBulkMixin<R, A>
implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
R bulkHandleVariableDeclaration(VariableDefinitions node, A arg) {
return bulkHandleNode(node, "Variable declaration `#` unhandled.", arg);
}
@override
R visitInstanceFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitLocalConstantDeclaration(VariableDefinitions node, Node definition,
LocalVariableElement variable, ConstantExpression constant, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitLocalVariableDeclaration(VariableDefinitions node, Node definition,
LocalVariableElement variable, Node initializer, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitStaticConstantDeclaration(VariableDefinitions node, Node definition,
FieldElement field, ConstantExpression constant, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitStaticFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitTopLevelConstantDeclaration(VariableDefinitions node, Node definition,
FieldElement field, ConstantExpression constant, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
@override
R visitTopLevelFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
return bulkHandleVariableDeclaration(node, arg);
}
}
/// Visitor that implements [SemanticDeclarationVisitor] 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 [SemanticDeclarationVisitor].
class BulkDeclarationVisitor<R, A> extends SemanticDeclarationVisitor<R, A>
with
ConstructorBulkMixin<R, A>,
FunctionBulkMixin<R, A>,
VariableBulkMixin<R, A>,
ParameterBulkMixin<R, A>,
InitializerBulkMixin<R, A> {
@override
R apply(Node node, A arg) {
throw new UnimplementedError("BulkDeclVisitor.apply unimplemented");
}
@override
R bulkHandleNode(Node node, String message, A arg) {
throw new UnimplementedError(
"BulkDeclVisitor.bulkHandleNode unimplemented");
}
@override
applyInitializers(FunctionExpression constructor, A arg) {
throw new UnimplementedError(
"BulkDeclVisitor.applyInitializers unimplemented");
}
@override
applyParameters(NodeList parameters, A arg) {
throw new UnimplementedError(
"BulkDeclVisitor.applyParameters unimplemented");
}
}
/// [SemanticSendVisitor] that visits subnodes.
class TraversalSendMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R apply(Node node, A arg) {
throw new UnimplementedError("TraversalMixin.apply unimplemented");
}
@override
void previsitDeferredAccess(Send node, PrefixElement prefix, A arg) {}
@override
R errorInvalidCompound(Send node, ErroneousElement error,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R errorInvalidGet(Send node, ErroneousElement error, A arg) {
return null;
}
@override
R errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R errorInvalidPostfix(
Send node, ErroneousElement error, IncDecOperator operator, A arg) {
return null;
}
@override
R errorInvalidPrefix(
Send node, ErroneousElement error, IncDecOperator operator, A arg) {
return null;
}
@override
R errorInvalidSet(Send node, ErroneousElement error, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R errorInvalidUnary(
Send node, UnaryOperator operator, ErroneousElement error, A arg) {
return null;
}
@override
R errorInvalidEquals(Send node, ErroneousElement error, Node right, A arg) {
apply(right, arg);
return null;
}
@override
R errorInvalidNotEquals(
Send node, ErroneousElement error, Node right, A arg) {
apply(right, arg);
return null;
}
@override
R errorInvalidBinary(Send node, ErroneousElement error,
BinaryOperator operator, Node right, A arg) {
apply(right, arg);
return null;
}
@override
R errorInvalidIndex(Send node, ErroneousElement error, Node index, A arg) {
apply(index, arg);
return null;
}
@override
R errorInvalidIndexSet(
Send node, ErroneousElement error, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R errorInvalidCompoundIndexSet(Send node, ErroneousElement error, Node index,
AssignmentOperator operator, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitClassTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitDynamicTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalLocalVariableSet(
SendSet node, LocalVariableElement variable, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalParameterSet(
SendSet node, ParameterElement parameter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalStaticFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalTopLevelFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return null;
}
@override
R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return null;
}
@override
R visitLocalFunctionSet(
SendSet node, LocalFunctionElement function, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
return null;
}
@override
R visitStaticSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperSetterGet(Send node, FunctionElement setter, A arg) {
return null;
}
@override
R visitSuperSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitTopLevelFunctionSet(
Send node, MethodElement function, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
return null;
}
@override
R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitTypeVariableTypeLiteralSet(
SendSet node, TypeVariableElement element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTypedefTypeLiteralSet(
SendSet node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperIndex(Send node, Element function, Node index, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperGet(Send node, Element element, A arg) {
return null;
}
@override
R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitAs(Send node, Node expression, DartType type, 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, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return null;
}
@override
R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitClassTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return null;
}
@override
R visitClassTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return null;
}
@override
R visitCompoundIndexSet(SendSet 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, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
apply(receiver, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertyGet(
Send node, Node receiver, Name name, 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 visitIfNotNullDynamicPropertyInvoke(
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, Name name, IncDecOperator operator, A arg) {
apply(receiver, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
apply(receiver, arg);
return null;
}
@override
R visitDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
apply(receiver, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
apply(receiver, arg);
return null;
}
@override
R visitDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return null;
}
@override
R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitDynamicTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return null;
}
@override
R visitDynamicTypeLiteralPrefix(
Send node, ConstantExpression 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,
CallStructure callStructure, A arg) {
apply(expression, arg);
apply(arguments, arg);
return null;
}
@override
R visitIndex(Send node, Node receiver, Node index, A arg) {
apply(receiver, arg);
apply(index, arg);
return null;
}
@override
R visitIndexSet(SendSet 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, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitLocalFunctionIncompatibleInvoke(
Send node,
LocalFunctionElement function,
NodeList arguments,
CallStructure callStructure,
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, CallStructure callStructure, 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 visitIfNull(Send node, Node left, Node right, A arg) {
apply(left, arg);
apply(right, 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, CallStructure callStructure, 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,
CallStructure callStructure, 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, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, 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, CallStructure callStructure, 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(
SendSet 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,
CallStructure callStructure, 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, CallStructure callStructure, 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 visitSuperIndex(Send node, FunctionElement function, Node index, A arg) {
apply(index, arg);
return null;
}
@override
R visitSuperIndexSet(
SendSet 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,
CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
NodeList arguments, CallStructure callStructure, 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, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitThisPropertyCompound(
Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitThisPropertyGet(Send node, Name name, 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, Name name, IncDecOperator operator, A arg) {
return null;
}
@override
R visitThisPropertyPrefix(
Send node, Name name, IncDecOperator operator, A arg) {
return null;
}
@override
R visitThisPropertySet(SendSet node, Name name, 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,
CallStructure callStructure, 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, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, 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, CallStructure callStructure, 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, CallStructure callStructure, 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, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return null;
}
@override
R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitTypedefTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return null;
}
@override
R visitTypedefTypeLiteralPrefix(
Send node, ConstantExpression 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 visitUnresolvedCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedGet(Send node, Element element, A arg) {
return null;
}
@override
R visitUnresolvedInvoke(Send node, Element element, NodeList arguments,
Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitUnresolvedPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSet(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 visitUnresolvedSuperIndexSet(
Send node, Element element, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperGetterCompoundIndexSet(
SendSet node,
Element element,
MethodElement setter,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperSetterCompoundIndexSet(
SendSet node,
MethodElement getter,
Element element,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperCompoundIndexSet(SendSet node, Element element,
Node index, AssignmentOperator operator, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperBinary(Send node, Element element,
BinaryOperator operator, Node argument, A arg) {
apply(argument, arg);
return null;
}
@override
R visitUnresolvedSuperUnary(
Send node, UnaryOperator operator, Element element, A arg) {
return null;
}
@override
R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperSetterIndexPostfix(Send node, MethodElement getter,
Element element, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperIndexPostfix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperSetterIndexPrefix(Send node, MethodElement getter,
Element element, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitUnresolvedSuperIndexPrefix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
apply(index, arg);
return null;
}
@override
R visitIndexPostfix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
apply(receiver, arg);
apply(index, arg);
return null;
}
@override
R visitIndexPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
apply(receiver, arg);
apply(index, arg);
return null;
}
@override
R visitSuperIndexPostfix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
apply(index, arg);
return null;
}
@override
R visitSuperIndexPrefix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
apply(index, arg);
return null;
}
@override
R errorInvalidSetIfNull(Send node, ErroneousElement error, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitClassTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitDynamicTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalStaticFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalSuperFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitIfNotNullDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
apply(receiver, arg);
apply(rhs, arg);
return null;
}
@override
R visitLocalFunctionSetIfNull(
Send node, LocalFunctionElement function, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticMethodSetterSetIfNull(
Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
FieldElement writtenField, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperFieldSetterSetIfNull(
Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperGetterFieldSetIfNull(
Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTypeVariableTypeLiteralSetIfNull(
Send node, TypeVariableElement element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitTypedefTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedStaticGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedStaticSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedTopLevelGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedTopLevelSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitConstConstructorInvoke(
NewExpression node, ConstructedConstantExpression constant, A arg) {
return null;
}
@override
R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
BoolFromEnvironmentConstantExpression constant, A arg) {
return null;
}
@override
R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
IntFromEnvironmentConstantExpression constant, A arg) {
return null;
}
@override
R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
StringFromEnvironmentConstantExpression constant, A arg) {
return null;
}
@override
R visitConstructorIncompatibleInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitUnresolvedClassConstructorInvoke(
NewExpression node,
Element constructor,
DartType type,
NodeList arguments,
Selector selector,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
DartType type, NodeList arguments, Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
ConstructorElement effectiveTarget,
InterfaceType effectiveTargetType,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitRedirectingGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitAbstractClassConstructorInvoke(
NewExpression node,
ConstructorElement element,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitUnresolvedRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R errorNonConstantConstructorInvoke(NewExpression node, Element element,
DartType type, NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitUnresolvedStaticGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitStaticMethodCompound(Send node, MethodElement method,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedStaticGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitStaticMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitTopLevelMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedStaticGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitStaticMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitTopLevelMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitSuperFieldFieldCompound(Send node, FieldElement readField,
FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitFinalSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitSuperMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitSuperMethodPostfix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitSuperMethodPrefix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitFinalTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return null;
}
@override
R visitTopLevelMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSuperPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSuperGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSuperGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return null;
}
@override
R visitIndexSetIfNull(
SendSet node, Node receiver, Node index, Node rhs, A arg) {
apply(receiver, arg);
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
MethodElement setter, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element,
MethodElement setter, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter,
Element element, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R visitUnresolvedSuperIndexSetIfNull(
Send node, Element element, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
@override
R errorInvalidIndexSetIfNull(
SendSet node, ErroneousElement error, Node index, Node rhs, A arg) {
apply(index, arg);
apply(rhs, arg);
return null;
}
}
/// [SemanticDeclarationVisitor] that visits subnodes.
class TraversalDeclarationMixin<R, A>
implements SemanticDeclarationVisitor<R, A> {
@override
R apply(Node node, A arg) {
throw new UnimplementedError("TraversalMixin.apply unimplemented");
}
@override
applyInitializers(FunctionExpression constructor, A arg) {
throw new UnimplementedError(
"TraversalMixin.applyInitializers unimplemented");
}
@override
applyParameters(NodeList parameters, A arg) {
throw new UnimplementedError(
"TraversalMixin.applyParameters unimplemented");
}
@override
R visitAbstractMethodDeclaration(FunctionExpression node,
MethodElement method, NodeList parameters, A arg) {
applyParameters(parameters, arg);
return null;
}
@override
R visitClosureDeclaration(FunctionExpression node,
LocalFunctionElement function, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitFactoryConstructorDeclaration(FunctionExpression node,
ConstructorElement constructor, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitFieldInitializer(
SendSet node, FieldElement field, Node initializer, A arg) {
apply(initializer, arg);
return null;
}
@override
R visitGenerativeConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
NodeList initializers,
Node body,
A arg) {
applyParameters(parameters, arg);
applyInitializers(node, arg);
apply(body, arg);
return null;
}
@override
R visitInstanceMethodDeclaration(FunctionExpression node,
MethodElement method, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitLocalFunctionDeclaration(FunctionExpression node,
LocalFunctionElement function, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitRedirectingFactoryConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
InterfaceType redirectionType,
ConstructorElement redirectionTarget,
A arg) {
applyParameters(parameters, arg);
return null;
}
@override
R visitRedirectingGenerativeConstructorDeclaration(
FunctionExpression node,
ConstructorElement constructor,
NodeList parameters,
NodeList initializers,
A arg) {
applyParameters(parameters, arg);
applyInitializers(node, arg);
return null;
}
@override
R visitStaticFunctionDeclaration(FunctionExpression node,
MethodElement function, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitSuperConstructorInvoke(
Send node,
ConstructorElement superConstructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
apply(arguments, arg);
return null;
}
@override
R visitImplicitSuperConstructorInvoke(FunctionExpression node,
ConstructorElement superConstructor, InterfaceType type, A arg) {
return null;
}
@override
R visitThisConstructorInvoke(Send node, ConstructorElement thisConstructor,
NodeList arguments, CallStructure callStructure, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitTopLevelFunctionDeclaration(FunctionExpression node,
MethodElement function, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R errorUnresolvedFieldInitializer(
SendSet node, Element element, Node initializer, A arg) {
apply(initializer, arg);
return null;
}
@override
R errorUnresolvedSuperConstructorInvoke(Send node, Element element,
NodeList arguments, Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R errorUnresolvedThisConstructorInvoke(Send node, Element element,
NodeList arguments, Selector selector, A arg) {
apply(arguments, arg);
return null;
}
@override
R visitLocalVariableDeclaration(VariableDefinitions node, Node definition,
LocalVariableElement variable, Node initializer, A arg) {
if (initializer != null) {
apply(initializer, arg);
}
return null;
}
@override
R visitOptionalParameterDeclaration(
VariableDefinitions node,
Node definition,
ParameterElement parameter,
ConstantExpression defaultValue,
int index,
A arg) {
return null;
}
@override
R visitParameterDeclaration(VariableDefinitions node, Node definition,
ParameterElement parameter, int index, A arg) {
return null;
}
@override
R visitInitializingFormalDeclaration(
VariableDefinitions node,
Node definition,
InitializingFormalElement initializingFormal,
int index,
A arg) {
return null;
}
@override
R visitLocalConstantDeclaration(VariableDefinitions node, Node definition,
LocalVariableElement variable, ConstantExpression constant, A arg) {
return null;
}
@override
R visitNamedInitializingFormalDeclaration(
VariableDefinitions node,
Node definition,
InitializingFormalElement initializingFormal,
ConstantExpression defaultValue,
A arg) {
return null;
}
@override
R visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
ParameterElement parameter, ConstantExpression defaultValue, A arg) {
return null;
}
@override
R visitOptionalInitializingFormalDeclaration(
VariableDefinitions node,
Node definition,
InitializingFormalElement initializingFormal,
ConstantExpression defaultValue,
int index,
A arg) {
return null;
}
@override
R visitInstanceFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
if (initializer != null) {
apply(initializer, arg);
}
return null;
}
@override
R visitStaticConstantDeclaration(VariableDefinitions node, Node definition,
FieldElement field, ConstantExpression constant, A arg) {
return null;
}
@override
R visitStaticFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
if (initializer != null) {
apply(initializer, arg);
}
return null;
}
@override
R visitTopLevelConstantDeclaration(VariableDefinitions node, Node definition,
FieldElement field, ConstantExpression constant, A arg) {
return null;
}
@override
R visitTopLevelFieldDeclaration(VariableDefinitions node, Node definition,
FieldElement field, Node initializer, A arg) {
if (initializer != null) {
apply(initializer, arg);
}
return null;
}
@override
R visitAbstractGetterDeclaration(
FunctionExpression node, MethodElement getter, A arg) {
return null;
}
@override
R visitAbstractSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, A arg) {
applyParameters(parameters, arg);
return null;
}
@override
R visitInstanceGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
apply(body, arg);
return null;
}
@override
R visitInstanceSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitStaticGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
apply(body, arg);
return null;
}
@override
R visitStaticSetterDeclaration(FunctionExpression node, MethodElement setter,
NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, arg);
return null;
}
@override
R visitTopLevelGetterDeclaration(
FunctionExpression node, MethodElement getter, Node body, A arg) {
apply(body, arg);
return null;
}
@override
R visitTopLevelSetterDeclaration(FunctionExpression node,
MethodElement setter, NodeList parameters, Node body, A arg) {
applyParameters(parameters, arg);
apply(body, 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 TraversalSendMixin<R, A>, TraversalDeclarationMixin<R, A> {
TraversalVisitor(TreeElements elements) : super(elements);
SemanticSendVisitor<R, A> get sendVisitor => this;
SemanticDeclarationVisitor<R, A> get declVisitor => this;
R apply(Node node, A arg) {
node.accept(this);
return null;
}
@override
applyInitializers(FunctionExpression constructor, A arg) {
visitInitializers(constructor, arg);
}
@override
applyParameters(NodeList parameters, A arg) {
visitParameters(parameters, arg);
}
@override
internalError(Spannable spannable, String message) {
throw new SpannableAssertionFailure(spannable, message);
}
@override
R visitNode(Node node) {
node.visitChildren(this);
return null;
}
@override
R visitTypeAnnotation(TypeAnnotation node) {
// Skip [Send] contained in type annotations, like `prefix.Type`.
return null;
}
}
/// Mixin that groups all non-compound `visitStaticX` and `visitTopLevelX`
/// method by delegating calls to `handleStaticX` methods.
///
/// This mixin is useful for the cases where both top level members and static
/// class members are handled uniformly.
abstract class BaseImplementationOfStaticsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleStaticFieldGet(Send node, FieldElement field, A arg);
R handleStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg);
R handleStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
R handleStaticFunctionGet(Send node, MethodElement function, A arg);
R handleStaticFunctionInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg);
R handleStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg);
R handleStaticGetterGet(Send node, FunctionElement getter, A arg);
R handleStaticGetterSet(Send node, FunctionElement getter, Node rhs, A arg);
R handleStaticGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg);
R handleStaticSetterGet(SendSet node, FunctionElement setter, A arg);
R handleStaticSetterSet(
SendSet node, FunctionElement setter, Node rhs, A arg);
R handleStaticSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg);
R handleFinalStaticFieldSet(
SendSet node, FieldElement field, Node rhs, A arg);
R handleStaticFunctionSet(
SendSet node, MethodElement function, Node rhs, A arg);
@override
R visitStaticFieldGet(Send node, FieldElement field, A arg) {
return handleStaticFieldGet(node, field, arg);
}
@override
R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return handleStaticFieldInvoke(node, field, arguments, callStructure, arg);
}
@override
R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return handleStaticFieldSet(node, field, rhs, arg);
}
@override
R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
return handleStaticFunctionGet(node, function, arg);
}
@override
R visitStaticFunctionInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticFunctionInvoke(
node, function, arguments, callStructure, arg);
}
@override
R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticFunctionIncompatibleInvoke(
node, function, arguments, callStructure, arg);
}
@override
R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
return handleStaticGetterGet(node, getter, arg);
}
@override
R visitStaticGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticGetterInvoke(
node, getter, arguments, callStructure, arg);
}
@override
R visitStaticSetterSet(
SendSet node, FunctionElement setter, Node rhs, A arg) {
return handleStaticSetterSet(node, setter, rhs, arg);
}
@override
R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
return handleStaticFieldGet(node, field, arg);
}
@override
R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
CallStructure callStructure, A arg) {
return handleStaticFieldInvoke(node, field, arguments, callStructure, arg);
}
@override
R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
return handleStaticFieldSet(node, field, rhs, arg);
}
@override
R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
return handleStaticFunctionGet(node, function, arg);
}
@override
R visitTopLevelFunctionInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticFunctionInvoke(
node, function, arguments, callStructure, arg);
}
@override
R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticFunctionIncompatibleInvoke(
node, function, arguments, callStructure, arg);
}
@override
R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
return handleStaticGetterGet(node, getter, arg);
}
@override
R visitTopLevelGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
return handleStaticGetterSet(node, getter, rhs, arg);
}
@override
R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticGetterInvoke(
node, getter, arguments, callStructure, arg);
}
@override
R visitTopLevelSetterSet(
SendSet node, FunctionElement setter, Node rhs, A arg) {
return handleStaticSetterSet(node, setter, rhs, arg);
}
@override
R visitStaticSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticSetterInvoke(
node, setter, arguments, callStructure, arg);
}
@override
R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
NodeList arguments, CallStructure callStructure, A arg) {
return handleStaticSetterInvoke(
node, setter, arguments, callStructure, arg);
}
@override
R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
return handleStaticSetterGet(node, setter, arg);
}
@override
R visitStaticGetterSet(
SendSet node, FunctionElement getter, Node rhs, A arg) {
return handleStaticGetterSet(node, getter, rhs, arg);
}
@override
R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
return handleStaticSetterGet(node, setter, arg);
}
@override
R visitFinalStaticFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
return handleFinalStaticFieldSet(node, field, rhs, arg);
}
@override
R visitFinalTopLevelFieldSet(
SendSet node, FieldElement field, Node rhs, A arg) {
return handleFinalStaticFieldSet(node, field, rhs, arg);
}
@override
R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
return handleStaticFunctionSet(node, function, rhs, arg);
}
@override
R visitTopLevelFunctionSet(
Send node, MethodElement function, Node rhs, A arg) {
return handleStaticFunctionSet(node, function, rhs, arg);
}
}
/// Mixin that groups all compounds visitors `visitStaticX` and `visitTopLevelX`
/// method by delegating calls to `handleStaticX` methods.
///
/// This mixin is useful for the cases where both top level members and static
/// class members are handled uniformly.
abstract class BaseImplementationOfStaticCompoundsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg);
R handleStaticFieldPostfixPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg,
{bool isPrefix});
R handleStaticGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
R handleStaticGetterSetterPostfixPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleStaticMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
R handleStaticMethodSetterPostfixPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleFinalStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg);
R handleFinalStaticFieldPostfixPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg,
{bool isPrefix});
R handleStaticMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg);
R handleStaticMethodPostfixPrefix(
Send node, FunctionElement method, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedStaticGetterCompound(Send node, Element element,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
R handleUnresolvedStaticGetterPostfixPrefix(Send node, Element element,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedStaticSetterCompound(Send node, FunctionElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg);
R handleUnresolvedStaticSetterPostfixPrefix(Send node, FunctionElement getter,
Element element, IncDecOperator operator, A arg,
{bool isPrefix});
@override
R visitStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticFieldCompound(node, field, operator, rhs, arg);
}
@override
R visitStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: false);
}
@override
R visitStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: true);
}
@override
R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticGetterSetterCompound(
node, getter, setter, operator, rhs, arg);
}
@override
R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: false);
}
@override
R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: true);
}
@override
R visitStaticMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticMethodSetterCompound(
node, method, setter, operator, rhs, arg);
}
@override
R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticMethodSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: false);
}
@override
R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticMethodSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: true);
}
@override
R visitTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticFieldCompound(node, field, operator, rhs, arg);
}
@override
R visitTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: false);
}
@override
R visitTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: true);
}
@override
R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticGetterSetterCompound(
node, getter, setter, operator, rhs, arg);
}
@override
R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: false);
}
@override
R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: true);
}
@override
R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticMethodSetterCompound(
node, method, setter, operator, rhs, arg);
}
@override
R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticMethodSetterPostfixPrefix(
node, method, setter, operator, arg,
isPrefix: false);
}
@override
R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticMethodSetterPostfixPrefix(
node, method, setter, operator, arg,
isPrefix: true);
}
@override
R visitFinalStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleFinalStaticFieldCompound(node, field, operator, rhs, arg);
}
@override
R visitFinalStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleFinalStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: false);
}
@override
R visitFinalStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleFinalStaticFieldPostfixPrefix(node, field, operator, arg,
isPrefix: true);
}
@override
R visitStaticMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticMethodCompound(node, method, operator, rhs, arg);
}
@override
R visitStaticMethodPostfix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return handleStaticMethodPostfixPrefix(node, method, operator, arg,
isPrefix: false);
}
@override
R visitStaticMethodPrefix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return handleStaticMethodPostfixPrefix(node, method, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedStaticGetterCompound(Send node, Element element,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleUnresolvedStaticGetterCompound(
node, element, setter, operator, rhs, arg);
}
@override
R visitUnresolvedStaticGetterPostfix(Send node, Element element,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleUnresolvedStaticGetterPostfixPrefix(
node, element, setter, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedStaticGetterPrefix(Send node, Element element,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleUnresolvedStaticGetterPostfixPrefix(
node, element, setter, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedStaticSetterCompound(Send node, FunctionElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return handleUnresolvedStaticSetterCompound(
node, getter, element, operator, rhs, arg);
}
@override
R visitUnresolvedStaticSetterPostfix(Send node, FunctionElement getter,
Element element, IncDecOperator operator, A arg) {
return handleUnresolvedStaticSetterPostfixPrefix(
node, getter, element, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedStaticSetterPrefix(Send node, FunctionElement getter,
Element element, IncDecOperator operator, A arg) {
return handleUnresolvedStaticSetterPostfixPrefix(
node, getter, element, operator, arg,
isPrefix: true);
}
}
/// Mixin that groups all non-compound `visitLocalX` and `visitParameterX`
/// methods by delegating calls to `handleLocalX` methods.
///
/// This mixin is useful for the cases where both parameters, local variables,
/// and local functions, captured or not, are handled uniformly.
abstract class BaseImplementationOfLocalsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleLocalGet(Send node, LocalElement element, A arg);
R handleLocalInvoke(Send node, LocalElement element, NodeList arguments,
CallStructure callStructure, A arg);
R handleLocalSet(SendSet node, LocalElement element, Node rhs, A arg);
R handleImmutableLocalSet(
SendSet node, LocalElement element, Node rhs, A arg);
@override
R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
return handleLocalGet(node, function, arg);
}
@override
R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
NodeList arguments, CallStructure callStructure, A arg) {
return handleLocalInvoke(node, function, arguments, callStructure, arg);
}
@override
R visitLocalFunctionIncompatibleInvoke(
Send node,
LocalFunctionElement function,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleLocalInvoke(node, function, arguments, callStructure, arg);
}
@override
R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
return handleLocalGet(node, variable, arg);
}
@override
R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
NodeList arguments, CallStructure callStructure, A arg) {
return handleLocalInvoke(node, variable, arguments, callStructure, arg);
}
@override
R visitLocalVariableSet(
SendSet node, LocalVariableElement variable, Node rhs, A arg) {
return handleLocalSet(node, variable, rhs, arg);
}
@override
R visitParameterGet(Send node, ParameterElement parameter, A arg) {
return handleLocalGet(node, parameter, arg);
}
@override
R visitParameterInvoke(Send node, ParameterElement parameter,
NodeList arguments, CallStructure callStructure, A arg) {
return handleLocalInvoke(node, parameter, arguments, callStructure, arg);
}
@override
R visitParameterSet(
SendSet node, ParameterElement parameter, Node rhs, A arg) {
return handleLocalSet(node, parameter, rhs, arg);
}
@override
R visitFinalLocalVariableSet(
SendSet node, LocalVariableElement variable, Node rhs, A arg) {
return handleImmutableLocalSet(node, variable, rhs, arg);
}
@override
R visitFinalParameterSet(
SendSet node, ParameterElement parameter, Node rhs, A arg) {
return handleImmutableLocalSet(node, parameter, rhs, arg);
}
@override
R visitLocalFunctionSet(
SendSet node, LocalFunctionElement function, Node rhs, A arg) {
return handleImmutableLocalSet(node, function, rhs, arg);
}
}
/// Mixin that groups all compound `visitLocalX` and `visitParameterX` methods
/// by delegating calls to `handleLocalX` methods.
///
/// This mixin is useful for the cases where both parameters, local variables,
/// and local functions, captured or not, are handled uniformly.
abstract class BaseImplementationOfLocalCompoundsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleLocalCompound(Send node, LocalElement element,
AssignmentOperator operator, Node rhs, A arg);
R handleLocalPostfixPrefix(
Send node, LocalElement element, IncDecOperator operator, A arg,
{bool isPrefix});
@override
R visitLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompound(node, variable, operator, rhs, arg);
}
@override
R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalPostfixPrefix(node, variable, operator, arg,
isPrefix: false);
}
@override
R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalPostfixPrefix(node, variable, operator, arg,
isPrefix: true);
}
@override
R visitParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompound(node, parameter, operator, rhs, arg);
}
@override
R visitParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalPostfixPrefix(node, parameter, operator, arg,
isPrefix: false);
}
@override
R visitParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalPostfixPrefix(node, parameter, operator, arg,
isPrefix: true);
}
}
/// Mixin that groups all `visitConstantX` and `visitXTypeLiteralY` methods for
/// constant type literals by delegating calls to `handleConstantX` methods.
///
/// This mixin is useful for the cases where expressions on constants are
/// handled uniformly.
abstract class BaseImplementationOfConstantsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleConstantGet(Node node, ConstantExpression constant, A arg);
R handleConstantInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg);
@override
R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return handleConstantInvoke(node, constant, arguments, callStructure, arg);
}
@override
R visitConstConstructorInvoke(
NewExpression node, ConstructedConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
BoolFromEnvironmentConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
IntFromEnvironmentConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
StringFromEnvironmentConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitConstantGet(Send node, ConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitConstantInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return handleConstantInvoke(node, constant, arguments, callStructure, arg);
}
@override
R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return handleConstantInvoke(node, constant, arguments, callStructure, arg);
}
@override
R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
return handleConstantGet(node, constant, arg);
}
@override
R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
NodeList arguments, CallStructure callStructure, A arg) {
return handleConstantInvoke(node, constant, arguments, callStructure, arg);
}
}
/// Mixin that groups all non-compound `visitDynamicPropertyX` and
/// `visitThisPropertyY` methods for by delegating calls to `handleDynamicX`
/// methods, providing `null` as the receiver for the this properties.
///
/// This mixin is useful for the cases where dynamic and this properties are
/// handled uniformly.
abstract class BaseImplementationOfDynamicsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleDynamicGet(Send node, Node receiver, Name name, A arg);
R handleDynamicInvoke(
Send node, Node receiver, NodeList arguments, Selector selector, A arg);
R handleDynamicSet(SendSet node, Node receiver, Name name, Node rhs, A arg);
@override
R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
return handleDynamicGet(node, receiver, name, arg);
}
@override
R visitIfNotNullDynamicPropertyGet(
Send node, Node receiver, Name name, A arg) {
// TODO(johnniwinther): should these redirect to handleDynamicX?
return handleDynamicGet(node, receiver, name, arg);
}
@override
R visitDynamicPropertyInvoke(
Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
return handleDynamicInvoke(node, receiver, arguments, selector, arg);
}
@override
R visitIfNotNullDynamicPropertyInvoke(
Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
return handleDynamicInvoke(node, receiver, arguments, selector, arg);
}
@override
R visitDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
return handleDynamicSet(node, receiver, name, rhs, arg);
}
@override
R visitIfNotNullDynamicPropertySet(
SendSet node, Node receiver, Name name, Node rhs, A arg) {
return handleDynamicSet(node, receiver, name, rhs, arg);
}
@override
R visitThisPropertyGet(Send node, Name name, A arg) {
return handleDynamicGet(node, null, name, arg);
}
@override
R visitThisPropertyInvoke(
Send node, NodeList arguments, Selector selector, A arg) {
return handleDynamicInvoke(node, null, arguments, selector, arg);
}
@override
R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg) {
return handleDynamicSet(node, null, name, rhs, arg);
}
}
/// Mixin that groups all compounds of `visitDynamicPropertyX` and
/// `visitThisPropertyY` methods for by delegating calls to `handleDynamicX`
/// methods, providing `null` as the receiver for the this properties.
///
/// This mixin is useful for the cases where dynamic and this properties are
/// handled uniformly.
abstract class BaseImplementationOfDynamicCompoundsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleDynamicCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg);
R handleDynamicPostfixPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg,
{bool isPrefix});
R handleDynamicIndexPostfixPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg,
{bool isPrefix});
@override
R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompound(node, receiver, name, operator, rhs, arg);
}
@override
R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompound(node, receiver, name, operator, rhs, arg);
}
@override
R visitDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
isPrefix: false);
}
@override
R visitIfNotNullDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
isPrefix: false);
}
@override
R visitDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
isPrefix: true);
}
@override
R visitIfNotNullDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
isPrefix: true);
}
@override
R visitThisPropertyCompound(
Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompound(node, null, name, operator, rhs, arg);
}
@override
R visitThisPropertyPostfix(
Send node, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, null, name, operator, arg,
isPrefix: false);
}
@override
R visitThisPropertyPrefix(
Send node, Name name, IncDecOperator operator, A arg) {
return handleDynamicPostfixPrefix(node, null, name, operator, arg,
isPrefix: true);
}
@override
R visitIndexPostfix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return handleDynamicIndexPostfixPrefix(node, receiver, index, operator, arg,
isPrefix: false);
}
@override
R visitIndexPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return handleDynamicIndexPostfixPrefix(node, receiver, index, operator, arg,
isPrefix: true);
}
}
/// The getter kind for statically resolved compound expressions.
enum CompoundGetter {
/// The compound reads from a field.
FIELD,
/// The compound reads from a getter.
GETTER,
/// The compound reads (closurizes) a method.
METHOD,
/// The getter is unresolved. The accompanied element is an erroneous element.
UNRESOLVED,
}
/// The setter kind for statically resolved compound expressions.
enum CompoundSetter {
/// The compound writes to a field.
FIELD,
/// The compound writes to a setter.
SETTER,
/// The setter is unresolved or unassignable. The accompanied element may be
/// `null`, and erroneous element, or the unassignable element.
INVALID,
}
/// The kind of a [CompoundRhs].
enum CompoundKind {
/// A prefix expression, like `--a`.
PREFIX,
/// A postfix expression, like `a++`.
POSTFIX,
/// A compound assignment, like `a *= b`.
ASSIGNMENT,
}
/// The right-hand side of a compound expression.
abstract class CompoundRhs {
/// The kind of compound.
CompoundKind get kind;
/// The binary operator implied by the compound operator.
BinaryOperator get operator;
/// The explicit right hand side in case of a compound assignment, `null`
/// otherwise.
Node get rhs;
}
/// A prefix or postfix of [incDecOperator].
class IncDecCompound implements CompoundRhs {
final CompoundKind kind;
final IncDecOperator incDecOperator;
IncDecCompound(this.kind, this.incDecOperator);
BinaryOperator get operator => incDecOperator.binaryOperator;
Node get rhs => null;
}
/// A compound assignment with [assignmentOperator] and [rhs].
class AssignmentCompound implements CompoundRhs {
final AssignmentOperator assignmentOperator;
final Node rhs;
AssignmentCompound(this.assignmentOperator, this.rhs);
CompoundKind get kind => CompoundKind.ASSIGNMENT;
BinaryOperator get operator => assignmentOperator.binaryOperator;
}
/// Simplified handling of compound assignments and prefix/postfix expressions.
abstract class BaseImplementationOfCompoundsMixin<R, A>
implements SemanticSendVisitor<R, A> {
/// Handle a super compounds, like `super.foo += 42` or `--super.bar`.
R handleSuperCompounds(
SendSet node,
Element getter,
CompoundGetter getterKind,
Element setter,
CompoundSetter setterKind,
CompoundRhs rhs,
A arg);
/// Handle a static or top level compounds, like `foo += 42` or `--bar`.
R handleStaticCompounds(
SendSet node,
Element getter,
CompoundGetter getterKind,
Element setter,
CompoundSetter setterKind,
CompoundRhs rhs,
A arg);
/// Handle a local compounds, like `foo += 42` or `--bar`. If [isSetterValid]
/// is false [local] is unassignable.
R handleLocalCompounds(
SendSet node, LocalElement local, CompoundRhs rhs, A arg,
{bool isSetterValid});
/// Handle a compounds on a type literal constant, like `Object += 42` or
/// `--Object`.
R handleTypeLiteralConstantCompounds(
SendSet node, ConstantExpression constant, CompoundRhs rhs, A arg);
/// Handle a compounds on a type variable type literal, like `T += 42` or
/// `--T`.
R handleTypeVariableTypeLiteralCompounds(
SendSet node, TypeVariableElement typeVariable, CompoundRhs rhs, A arg);
/// Handle a dynamic compounds, like `o.foo += 42` or `--o.foo`. [receiver] is
/// `null` for properties on `this`, like `--this.foo` or `--foo`.
R handleDynamicCompounds(
Send node, Node receiver, Name name, CompoundRhs rhs, A arg);
R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompounds(
node, receiver, name, new AssignmentCompound(operator, rhs), arg);
}
R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompounds(
node, receiver, name, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitThisPropertyCompound(
Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
return handleDynamicCompounds(
node, null, name, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompounds(
node, parameter, new AssignmentCompound(operator, rhs), arg,
isSetterValid: true);
}
@override
R visitFinalParameterCompound(Send node, ParameterElement parameter,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompounds(
node, parameter, new AssignmentCompound(operator, rhs), arg,
isSetterValid: false);
}
@override
R visitLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompounds(
node, variable, new AssignmentCompound(operator, rhs), arg,
isSetterValid: true);
}
@override
R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompounds(
node, variable, new AssignmentCompound(operator, rhs), arg,
isSetterValid: false);
}
@override
R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
AssignmentOperator operator, Node rhs, A arg) {
return handleLocalCompounds(
node, function, new AssignmentCompound(operator, rhs), arg,
isSetterValid: false);
}
@override
R visitStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitFinalStaticFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, field, CompoundGetter.FIELD, null,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitStaticMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, field, CompoundGetter.FIELD, null,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitFinalSuperFieldCompound(Send node, FieldElement field,
AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, field, CompoundGetter.FIELD, field,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperMethodSetterCompound(Send node, FunctionElement method,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperFieldSetterCompound(Send node, FieldElement field,
FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, field, CompoundGetter.FIELD, setter,
CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, getter, CompoundGetter.GETTER, field,
CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
AssignmentOperator operator, Node rhs, A arg) {
return handleTypeVariableTypeLiteralCompounds(
node, element, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
AssignmentOperator operator, Node rhs, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new AssignmentCompound(operator, rhs), arg);
}
R visitDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, receiver, name,
new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
R visitIfNotNullDynamicPropertyPrefix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, receiver, name,
new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, parameter, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isSetterValid: true);
}
@override
R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, variable, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isSetterValid: true);
}
@override
R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, function, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isSetterValid: false);
}
R visitThisPropertyPrefix(
Send node, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, null, name,
new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
readField,
CompoundGetter.FIELD,
writtenField,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperFieldSetterPrefix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
method,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitClassTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitTypedefTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitTypeVariableTypeLiteralPrefix(
Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
return handleTypeVariableTypeLiteralCompounds(
node, element, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitDynamicTypeLiteralPrefix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(
node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
@override
R visitDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, receiver, name,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitIfNotNullDynamicPropertyPostfix(
Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, receiver, name,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalCompounds(node, parameter,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isSetterValid: true);
}
@override
R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, variable, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isSetterValid: true);
}
@override
R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, function, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isSetterValid: false);
}
R visitThisPropertyPostfix(
Send node, Name name, IncDecOperator operator, A arg) {
return handleDynamicCompounds(node, null, name,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
readField,
CompoundGetter.FIELD,
writtenField,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperFieldSetterPostfix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
field,
CompoundSetter.FIELD,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
method,
CompoundGetter.METHOD,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitClassTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(node, constant,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitTypedefTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(node, constant,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitTypeVariableTypeLiteralPostfix(
Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
return handleTypeVariableTypeLiteralCompounds(
node, element, new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitDynamicTypeLiteralPostfix(
Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
return handleTypeLiteralConstantCompounds(node, constant,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitUnresolvedStaticGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitStaticMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitTopLevelMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedStaticGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitStaticMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitTopLevelMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedStaticGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitStaticMethodCompound(Send node, MethodElement method,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitTopLevelMethodCompound(Send node, MethodElement method,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitUnresolvedCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
return handleStaticCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, variable, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isSetterValid: false);
}
@override
R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, variable, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isSetterValid: false);
}
@override
R visitFinalParameterPostfix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalCompounds(node, parameter,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isSetterValid: false);
}
@override
R visitFinalParameterPrefix(
Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
return handleLocalCompounds(
node, parameter, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isSetterValid: false);
}
@override
R visitFinalStaticFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitFinalStaticFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperFieldFieldCompound(Send node, FieldElement readField,
FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(
node,
readField,
CompoundGetter.FIELD,
writtenField,
CompoundSetter.FIELD,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitFinalSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitFinalSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitSuperMethodCompound(Send node, FunctionElement method,
AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitSuperMethodPostfix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitSuperMethodPrefix(
Send node, FunctionElement method, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
method,
CompoundGetter.METHOD,
method,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitFinalTopLevelFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitFinalTopLevelFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleStaticCompounds(
node,
field,
CompoundGetter.FIELD,
field,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedSuperCompound(Send node, Element element,
AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitUnresolvedSuperPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedSuperPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedSuperGetterCompound(Send node, Element element,
MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new AssignmentCompound(operator, rhs),
arg);
}
@override
R visitUnresolvedSuperGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedSuperGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
element,
CompoundGetter.UNRESOLVED,
setter,
CompoundSetter.SETTER,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
@override
R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
Element element, AssignmentOperator operator, Node rhs, A arg) {
return handleSuperCompounds(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.POSTFIX, operator),
arg);
}
@override
R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleSuperCompounds(
node,
getter,
CompoundGetter.GETTER,
element,
CompoundSetter.INVALID,
new IncDecCompound(CompoundKind.PREFIX, operator),
arg);
}
}
/// Simplified handling of if-null assignments.
abstract class BaseImplementationOfSetIfNullsMixin<R, A>
implements SemanticSendVisitor<R, A> {
/// Handle a super if-null assignments, like `super.foo ??= 42`.
R handleSuperSetIfNulls(
SendSet node,
Element getter,
CompoundGetter getterKind,
Element setter,
CompoundSetter setterKind,
Node rhs,
A arg);
/// Handle a static or top level if-null assignments, like `foo ??= 42`.
R handleStaticSetIfNulls(
SendSet node,
Element getter,
CompoundGetter getterKind,
Element setter,
CompoundSetter setterKind,
Node rhs,
A arg);
/// Handle a local if-null assignments, like `foo ??= 42`. If [isSetterValid]
/// is false [local] is unassignable.
R handleLocalSetIfNulls(SendSet node, LocalElement local, Node rhs, A arg,
{bool isSetterValid});
/// Handle a if-null assignments on a type literal constant, like
/// `Object ??= 42`.
R handleTypeLiteralConstantSetIfNulls(
SendSet node, ConstantExpression constant, Node rhs, A arg);
/// Handle a dynamic if-null assignments, like `o.foo ??= 42`. [receiver] is
/// `null` for properties on `this`, like `this.foo ??= 42` or `foo ??= 42`.
R handleDynamicSetIfNulls(
Send node, Node receiver, Name name, Node rhs, A arg);
@override
R visitClassTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
}
@override
R visitDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
return handleDynamicSetIfNulls(node, receiver, name, rhs, arg);
}
@override
R visitDynamicTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
}
@override
R visitFinalLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
return handleLocalSetIfNulls(node, variable, rhs, arg,
isSetterValid: false);
}
@override
R visitFinalParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
return handleLocalSetIfNulls(node, parameter, rhs, arg,
isSetterValid: false);
}
@override
R visitFinalStaticFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitFinalSuperFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitFinalTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitIfNotNullDynamicPropertySetIfNull(
Send node, Node receiver, Name name, Node rhs, A arg) {
return handleDynamicSetIfNulls(node, receiver, name, rhs, arg);
}
@override
R visitLocalFunctionSetIfNull(
Send node, LocalFunctionElement function, Node rhs, A arg) {
return handleLocalSetIfNulls(node, function, rhs, arg,
isSetterValid: false);
}
@override
R visitLocalVariableSetIfNull(
Send node, LocalVariableElement variable, Node rhs, A arg) {
return handleLocalSetIfNulls(node, variable, rhs, arg, isSetterValid: true);
}
@override
R visitParameterSetIfNull(
Send node, ParameterElement parameter, Node rhs, A arg) {
return handleLocalSetIfNulls(node, parameter, rhs, arg,
isSetterValid: true);
}
@override
R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, rhs, arg);
}
@override
R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitStaticMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitStaticMethodSetterSetIfNull(
Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
FieldElement writtenField, Node rhs, A arg) {
return handleSuperSetIfNulls(node, readField, CompoundGetter.FIELD,
writtenField, CompoundSetter.FIELD, rhs, arg);
}
@override
R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, rhs, arg);
}
@override
R visitSuperFieldSetterSetIfNull(
Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitSuperGetterFieldSetIfNull(
Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, field,
CompoundSetter.FIELD, rhs, arg);
}
@override
R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitSuperMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return handleSuperSetIfNulls(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
return handleSuperSetIfNulls(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
return handleDynamicSetIfNulls(node, null, name, rhs, arg);
}
@override
R visitTopLevelFieldSetIfNull(
Send node, FieldElement field, Node rhs, A arg) {
return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
CompoundSetter.FIELD, rhs, arg);
}
@override
R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
FunctionElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitTopLevelMethodSetIfNull(
Send node, FunctionElement method, Node rhs, A arg) {
return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, method,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
FunctionElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, setter,
CompoundSetter.SETTER, rhs, arg);
}
@override
R visitTypedefTypeLiteralSetIfNull(
Send node, ConstantExpression constant, Node rhs, A arg) {
return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
}
@override
R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
element, CompoundSetter.INVALID, rhs, arg);
}
@override
R visitUnresolvedStaticGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
setter, CompoundSetter.SETTER, rhs, arg);
}
@override
R visitUnresolvedStaticSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitUnresolvedSuperGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return handleSuperSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
setter, CompoundSetter.SETTER, rhs, arg);
}
@override
R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
return handleSuperSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
element, CompoundSetter.INVALID, rhs, arg);
}
@override
R visitUnresolvedSuperSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, rhs, arg);
}
@override
R visitUnresolvedTopLevelGetterSetIfNull(
Send node, Element element, MethodElement setter, Node rhs, A arg) {
return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
setter, CompoundSetter.SETTER, rhs, arg);
}
@override
R visitUnresolvedTopLevelSetterSetIfNull(
Send node, MethodElement getter, Element element, Node rhs, A arg) {
return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, element,
CompoundSetter.INVALID, rhs, arg);
}
}
/// Simplified handling of indexed compound assignments and prefix/postfix
/// expressions.
abstract class BaseImplementationOfIndexCompoundsMixin<R, A>
implements SemanticSendVisitor<R, A> {
/// Handle a dynamic index compounds, like `receiver[index] += rhs` or
/// `--receiver[index]`.
R handleIndexCompounds(
SendSet node, Node receiver, Node index, CompoundRhs rhs, A arg);
/// Handle a super index compounds, like `super[index] += rhs` or
/// `--super[index]`.
R handleSuperIndexCompounds(SendSet node, Element indexFunction,
Element indexSetFunction, Node index, CompoundRhs rhs, A arg,
{bool isGetterValid, bool isSetterValid});
@override
R visitSuperCompoundIndexSet(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
index, new AssignmentCompound(operator, rhs), arg,
isGetterValid: true, isSetterValid: true);
}
@override
R visitSuperIndexPostfix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
index, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isGetterValid: true, isSetterValid: true);
}
@override
R visitSuperIndexPrefix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
index, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isGetterValid: true, isSetterValid: true);
}
@override
R visitUnresolvedSuperGetterCompoundIndexSet(
Send node,
Element indexFunction,
FunctionElement indexSetFunction,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
index, new AssignmentCompound(operator, rhs), arg,
isGetterValid: false, isSetterValid: true);
}
@override
R visitUnresolvedSuperSetterCompoundIndexSet(
Send node,
FunctionElement indexFunction,
Element indexSetFunction,
Node index,
AssignmentOperator operator,
Node rhs,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
index, new AssignmentCompound(operator, rhs), arg,
isGetterValid: true, isSetterValid: false);
}
@override
R visitUnresolvedSuperCompoundIndexSet(Send node, Element element, Node index,
AssignmentOperator operator, Node rhs, A arg) {
return handleSuperIndexCompounds(node, element, element, index,
new AssignmentCompound(operator, rhs), arg,
isGetterValid: false, isSetterValid: false);
}
@override
R visitUnresolvedSuperGetterIndexPostfix(
Send node,
Element element,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, element, indexSetFunction, index,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isGetterValid: false, isSetterValid: true);
}
@override
R visitUnresolvedSuperGetterIndexPrefix(
Send node,
Element element,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, element, indexSetFunction, index,
new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isGetterValid: false, isSetterValid: true);
}
@override
R visitUnresolvedSuperSetterIndexPostfix(
Send node,
MethodElement indexFunction,
Element element,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, element, index,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isGetterValid: true, isSetterValid: false);
}
@override
R visitUnresolvedSuperSetterIndexPrefix(
Send node,
MethodElement indexFunction,
Element element,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexCompounds(node, indexFunction, element, index,
new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isGetterValid: true, isSetterValid: false);
}
@override
R visitUnresolvedSuperIndexPostfix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return handleSuperIndexCompounds(node, element, element, index,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
isGetterValid: false, isSetterValid: false);
}
@override
R visitUnresolvedSuperIndexPrefix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return handleSuperIndexCompounds(node, element, element, index,
new IncDecCompound(CompoundKind.PREFIX, operator), arg,
isGetterValid: false, isSetterValid: false);
}
@override
R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
AssignmentOperator operator, Node rhs, A arg) {
return handleIndexCompounds(
node, receiver, index, new AssignmentCompound(operator, rhs), arg);
}
@override
R visitIndexPostfix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return handleIndexCompounds(node, receiver, index,
new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
}
@override
R visitIndexPrefix(
Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
return handleIndexCompounds(node, receiver, index,
new IncDecCompound(CompoundKind.PREFIX, operator), arg);
}
}
/// Simplified handling of super if-null assignments.
abstract class BaseImplementationOfSuperIndexSetIfNullMixin<R, A>
implements SemanticSendVisitor<R, A> {
/// Handle a super index if-null assignments, like `super[index] ??= rhs`.
R handleSuperIndexSetIfNull(SendSet node, Element indexFunction,
Element indexSetFunction, Node index, Node rhs, A arg,
{bool isGetterValid, bool isSetterValid});
@override
R visitSuperIndexSetIfNull(Send node, FunctionElement indexFunction,
FunctionElement indexSetFunction, Node index, Node rhs, A arg) {
return handleSuperIndexSetIfNull(
node, indexFunction, indexSetFunction, index, rhs, arg,
isGetterValid: true, isSetterValid: true);
}
@override
R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element indexFunction,
FunctionElement indexSetFunction, Node index, Node rhs, A arg) {
return handleSuperIndexSetIfNull(
node, indexFunction, indexSetFunction, index, rhs, arg,
isGetterValid: false, isSetterValid: true);
}
@override
R visitUnresolvedSuperSetterIndexSetIfNull(
Send node,
FunctionElement indexFunction,
Element indexSetFunction,
Node index,
Node rhs,
A arg) {
return handleSuperIndexSetIfNull(
node, indexFunction, indexSetFunction, index, rhs, arg,
isGetterValid: true, isSetterValid: false);
}
@override
R visitUnresolvedSuperIndexSetIfNull(
Send node, Element element, Node index, Node rhs, A arg) {
return handleSuperIndexSetIfNull(node, element, element, index, rhs, arg,
isGetterValid: false, isSetterValid: false);
}
}
/// Mixin that groups all `visitSuperXPrefix`, `visitSuperXPostfix` methods by
/// delegating calls to `handleSuperXPostfixPrefix` methods.
///
/// This mixin is useful for the cases where super prefix/postfix expression are
/// handled uniformly.
abstract class BaseImplementationOfSuperIncDecsMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleSuperFieldFieldPostfixPrefix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperFieldSetterPostfixPrefix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperGetterFieldPostfixPrefix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperGetterSetterPostfixPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperMethodSetterPostfixPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperIndexPostfixPrefix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg,
{bool isPrefix});
R handleUnresolvedSuperGetterIndexPostfixPrefix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedSuperSetterIndexPostfixPrefix(
Send node,
FunctionElement indexFunction,
Element element,
Node index,
IncDecOperator operator,
A arg,
{bool isPrefix});
R handleUnresolvedSuperIndexPostfixPrefix(
Send node, Element element, Node index, IncDecOperator operator, A arg,
{bool isPrefix});
R handleFinalSuperFieldPostfixPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg,
{bool isPrefix});
R handleSuperMethodPostfixPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedSuperPostfixPrefix(
Send node, Element element, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedSuperGetterPostfixPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg,
{bool isPrefix});
R handleUnresolvedSuperSetterPostfixPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg,
{bool isPrefix});
@override
R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return handleSuperFieldFieldPostfixPrefix(
node, readField, writtenField, operator, arg,
isPrefix: false);
}
@override
R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
FieldElement writtenField, IncDecOperator operator, A arg) {
return handleSuperFieldFieldPostfixPrefix(
node, readField, writtenField, operator, arg,
isPrefix: true);
}
@override
R visitSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperFieldFieldPostfixPrefix(node, field, field, operator, arg,
isPrefix: false);
}
@override
R visitSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleSuperFieldFieldPostfixPrefix(node, field, field, operator, arg,
isPrefix: true);
}
@override
R visitSuperFieldSetterPostfix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperFieldSetterPostfixPrefix(
node, field, setter, operator, arg,
isPrefix: false);
}
@override
R visitSuperFieldSetterPrefix(Send node, FieldElement field,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperFieldSetterPostfixPrefix(
node, field, setter, operator, arg,
isPrefix: true);
}
@override
R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return handleSuperGetterFieldPostfixPrefix(
node, getter, field, operator, arg,
isPrefix: false);
}
@override
R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
FieldElement field, IncDecOperator operator, A arg) {
return handleSuperGetterFieldPostfixPrefix(
node, getter, field, operator, arg,
isPrefix: true);
}
@override
R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: false);
}
@override
R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperGetterSetterPostfixPrefix(
node, getter, setter, operator, arg,
isPrefix: true);
}
@override
R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperMethodSetterPostfixPrefix(
node, method, setter, operator, arg,
isPrefix: false);
}
@override
R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
FunctionElement setter, IncDecOperator operator, A arg) {
return handleSuperMethodSetterPostfixPrefix(
node, method, setter, operator, arg,
isPrefix: true);
}
@override
R visitSuperIndexPostfix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexPostfixPrefix(
node, indexFunction, indexSetFunction, index, operator, arg,
isPrefix: false);
}
@override
R visitSuperIndexPrefix(
Send node,
FunctionElement indexFunction,
FunctionElement indexSetFunction,
Node index,
IncDecOperator operator,
A arg) {
return handleSuperIndexPostfixPrefix(
node, indexFunction, indexSetFunction, index, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
return handleUnresolvedSuperGetterIndexPostfixPrefix(
node, element, setter, index, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
MethodElement setter, Node index, IncDecOperator operator, A arg) {
return handleUnresolvedSuperGetterIndexPostfixPrefix(
node, element, setter, index, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperSetterIndexPostfix(
Send node,
MethodElement indexFunction,
Element element,
Node index,
IncDecOperator operator,
A arg) {
return handleUnresolvedSuperSetterIndexPostfixPrefix(
node, indexFunction, element, index, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperSetterIndexPrefix(
Send node,
MethodElement indexFunction,
Element element,
Node index,
IncDecOperator operator,
A arg) {
return handleUnresolvedSuperSetterIndexPostfixPrefix(
node, indexFunction, element, index, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperIndexPostfix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return handleUnresolvedSuperIndexPostfixPrefix(
node, element, index, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperIndexPrefix(
Send node, Element element, Node index, IncDecOperator operator, A arg) {
return handleUnresolvedSuperIndexPostfixPrefix(
node, element, index, operator, arg,
isPrefix: true);
}
@override
R visitFinalSuperFieldPostfix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleFinalSuperFieldPostfixPrefix(node, field, operator, arg,
isPrefix: false);
}
@override
R visitFinalSuperFieldPrefix(
Send node, FieldElement field, IncDecOperator operator, A arg) {
return handleFinalSuperFieldPostfixPrefix(node, field, operator, arg,
isPrefix: true);
}
@override
R visitSuperMethodPostfix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleSuperMethodPostfixPrefix(node, method, operator, arg,
isPrefix: false);
}
@override
R visitSuperMethodPrefix(
Send node, MethodElement method, IncDecOperator operator, A arg) {
return handleSuperMethodPostfixPrefix(node, method, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperPostfix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleUnresolvedSuperPostfixPrefix(node, element, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperPrefix(
Send node, Element element, IncDecOperator operator, A arg) {
return handleUnresolvedSuperPostfixPrefix(node, element, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperGetterPostfix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleUnresolvedSuperGetterPostfixPrefix(
node, element, setter, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperGetterPrefix(Send node, Element element,
MethodElement setter, IncDecOperator operator, A arg) {
return handleUnresolvedSuperGetterPostfixPrefix(
node, element, setter, operator, arg,
isPrefix: true);
}
@override
R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleUnresolvedSuperSetterPostfixPrefix(
node, getter, element, operator, arg,
isPrefix: false);
}
@override
R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
Element element, IncDecOperator operator, A arg) {
return handleUnresolvedSuperSetterPostfixPrefix(
node, getter, element, operator, arg,
isPrefix: true);
}
}
/// Mixin that groups the non-constant `visitXConstructorInvoke` methods by
/// delegating calls to the `handleConstructorInvoke` method.
///
/// This mixin is useful for the cases where all constructor invocations are
/// handled uniformly.
abstract class BaseImplementationOfNewMixin<R, A>
implements SemanticSendVisitor<R, A> {
R handleConstructorInvoke(NewExpression node, ConstructorElement constructor,
DartType type, NodeList arguments, CallStructure callStructure, A arg);
R visitGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
@override
R visitRedirectingGenerativeConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
@override
R visitFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
@override
R visitRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
ConstructorElement effectiveTarget,
InterfaceType effectiveTargetType,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
@override
R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
DartType type, NodeList arguments, Selector selector, A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, selector.callStructure, arg);
}
@override
R visitUnresolvedClassConstructorInvoke(NewExpression node, Element element,
DartType type, NodeList arguments, Selector selector, A arg) {
return handleConstructorInvoke(
node, element, type, arguments, selector.callStructure, arg);
}
@override
R visitAbstractClassConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
@override
R visitUnresolvedRedirectingFactoryConstructorInvoke(
NewExpression node,
ConstructorElement constructor,
InterfaceType type,
NodeList arguments,
CallStructure callStructure,
A arg) {
return handleConstructorInvoke(
node, constructor, type, arguments, callStructure, arg);
}
}