Deprecate IndexExpression.auxiliaryElements
Change-Id: I7359527db5bbf161a35296678ff2bd43052c1794
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/164740
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 2c91951..baa98f9 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -3241,11 +3241,15 @@
/// The auxiliary elements hold the static and propagated elements associated
/// with the getter context.
// TODO(brianwilkerson) Replace this API.
+ @Deprecated('Use CompoundAssignmentExpression.readElement and/or '
+ 'CompoundAssignmentExpression.writeElement')
AuxiliaryElements get auxiliaryElements;
/// Set the auxiliary elements associated with this identifier to the given
/// [elements].
// TODO(brianwilkerson) Replace this API.
+ @Deprecated('Use CompoundAssignmentExpression.readElement and/or '
+ 'CompoundAssignmentExpression.writeElement')
set auxiliaryElements(AuxiliaryElements elements);
/// Return the expression used to compute the index.
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 8f36687..3a7cf4b 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -5810,6 +5810,8 @@
/// If this expression is both in a getter and setter context, the
/// [AuxiliaryElements] will be set to hold onto the static element from the
/// getter context.
+ @Deprecated('Use CompoundAssignmentExpression.readElement and/or '
+ 'CompoundAssignmentExpression.writeElement')
@override
AuxiliaryElements auxiliaryElements;
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index d407077..1c7ffd9 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -4738,6 +4738,7 @@
_isEqualTokens(node.leftBracket, toNode.leftBracket),
_isEqualNodes(node.index, toNode.index),
_isEqualTokens(node.rightBracket, toNode.rightBracket))) {
+ // ignore: deprecated_member_use_from_same_package
toNode.auxiliaryElements = node.auxiliaryElements;
toNode.staticElement = node.staticElement;
toNode.staticType = node.staticType;
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 15a37c0..7082a55 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -321,6 +321,13 @@
_checkForDeadNullCoalesce(node.readType, node.rightHandSide);
}
_checkForAssignmentToFinal(lhs);
+ if (lhs is IndexExpression) {
+ _checkIndexExpressionIndex(
+ lhs.index,
+ readElement: node.readElement,
+ writeElement: node.writeElement,
+ );
+ }
super.visitAssignmentExpression(node);
}
@@ -816,21 +823,11 @@
@override
void visitIndexExpression(IndexExpression node) {
- void checkIndexExpression(MethodElement method) {
- if (method != null) {
- var parameters = method.parameters;
- if (parameters.isNotEmpty) {
- _checkForArgumentTypeNotAssignableForArgument2(
- argument: node.index,
- parameter: parameters[0],
- promoteParameterToNullable: false,
- );
- }
- }
- }
-
- checkIndexExpression(node.staticElement);
- checkIndexExpression(node.auxiliaryElements?.staticElement);
+ _checkIndexExpressionIndex(
+ node.index,
+ readElement: node.staticElement,
+ writeElement: null,
+ );
if (node.isNullAware) {
_checkForUnnecessaryNullAware(
@@ -838,6 +835,7 @@
node.question ?? node.period ?? node.leftBracket,
);
}
+
super.visitIndexExpression(node);
}
@@ -989,12 +987,20 @@
@override
void visitPostfixExpression(PostfixExpression node) {
+ var operand = node.operand;
if (node.operator.type == TokenType.BANG) {
_checkForUseOfVoidResult(node);
- _checkForUnnecessaryNullAware(node.operand, node.operator);
+ _checkForUnnecessaryNullAware(operand, node.operator);
} else {
- _checkForAssignmentToFinal(node.operand);
- _checkForIntNotAssignable(node.operand);
+ _checkForAssignmentToFinal(operand);
+ _checkForIntNotAssignable(operand);
+ }
+ if (operand is IndexExpression) {
+ _checkIndexExpressionIndex(
+ operand.index,
+ readElement: node.readElement,
+ writeElement: node.writeElement,
+ );
}
super.visitPostfixExpression(node);
}
@@ -1022,6 +1028,13 @@
_checkForUseOfVoidResult(operand);
_checkForIntNotAssignable(operand);
}
+ if (operand is IndexExpression) {
+ _checkIndexExpressionIndex(
+ operand.index,
+ readElement: node.readElement,
+ writeElement: node.writeElement,
+ );
+ }
super.visitPrefixExpression(node);
}
@@ -4809,6 +4822,34 @@
}
}
+ void _checkIndexExpressionIndex(
+ Expression index, {
+ @required ExecutableElement readElement,
+ @required ExecutableElement writeElement,
+ }) {
+ if (readElement is MethodElement) {
+ var parameters = readElement.parameters;
+ if (parameters.isNotEmpty) {
+ _checkForArgumentTypeNotAssignableForArgument2(
+ argument: index,
+ parameter: parameters[0],
+ promoteParameterToNullable: false,
+ );
+ }
+ }
+
+ if (writeElement is MethodElement) {
+ var parameters = writeElement.parameters;
+ if (parameters.isNotEmpty) {
+ _checkForArgumentTypeNotAssignableForArgument2(
+ argument: index,
+ parameter: parameters[0],
+ promoteParameterToNullable: false,
+ );
+ }
+ }
+ }
+
void _checkMixinInference(
NamedCompilationUnitMember node, WithClause withClause) {
if (withClause == null) {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 839af0a..42e94d4 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -658,6 +658,7 @@
if (left is IndexExpression) {
if (hasRead) {
left.staticElement = assignment.writeElement;
+ // ignore: deprecated_member_use_from_same_package
left.auxiliaryElements = AuxiliaryElements(assignment.readElement);
} else {
left.staticElement = assignment.writeElement;
diff --git a/pkg/analyzer/test/src/dart/ast/utilities_test.dart b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
index 47a4b20..d3699e0 100644
--- a/pkg/analyzer/test/src/dart/ast/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
@@ -568,6 +568,7 @@
MethodElement staticElement = ElementFactory.methodElement(
"m", interfaceTypeStar(ElementFactory.classElement2('C')));
AuxiliaryElements auxiliaryElements = AuxiliaryElements(staticElement);
+ // ignore: deprecated_member_use_from_same_package
fromNode.auxiliaryElements = auxiliaryElements;
fromNode.staticElement = staticElement;
DartType staticType = interfaceTypeStar(ElementFactory.classElement2('C'));
@@ -577,6 +578,7 @@
index: AstTestFactory.integer(0),
);
ResolutionCopier.copyResolutionData(fromNode, toNode);
+ // ignore: deprecated_member_use_from_same_package
expect(toNode.auxiliaryElements, same(auxiliaryElements));
expect(toNode.staticElement, same(staticElement));
expect(toNode.staticType, same(staticType));
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 003a597..49dd0da 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -112,23 +112,6 @@
assertType(node, type);
}
- void assertAuxElement(AstNode node, Element expected) {
- var auxElements = getNodeAuxElements(node);
- expect(auxElements?.staticElement, same(expected));
- }
-
- void assertAuxMember(
- Expression node,
- Element expectedBase,
- Map<String, String> expectedSubstitution,
- ) {
- var actual = getNodeAuxElements(node)?.staticElement as ExecutableMember;
-
- expect(actual.declaration, same(expectedBase));
-
- assertSubstitution(actual.substitution, expectedSubstitution);
- }
-
void assertBinaryExpression(
BinaryExpression node, {
@required Object element,
@@ -397,6 +380,7 @@
var isRead = node.inGetterContext();
var isWrite = node.inSetterContext();
if (isRead && isWrite) {
+ // ignore: deprecated_member_use_from_same_package
assertElement(node.auxiliaryElements?.staticElement, readElement);
assertElement(node.staticElement, writeElement);
} else if (isRead) {
@@ -824,14 +808,6 @@
}
}
- AuxiliaryElements getNodeAuxElements(AstNode node) {
- if (node is IndexExpression) {
- return node.auxiliaryElements;
- } else {
- fail('Unsupported node: (${node.runtimeType}) $node');
- }
- }
-
Element getNodeElement(AstNode node) {
if (node is Annotation) {
return node.element;
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index 5ece142..eacdbcd 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -194,8 +194,12 @@
}
f(A a) {
a['0'] += 0;
+ ++a['0'];
+ a['0']++;
}''', [
error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 120, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 130, 3),
]);
}
@@ -219,8 +223,12 @@
}
f(A a) {
a['0'] += 0;
+ ++a['0'];
+ a['0']++;
}''', [
error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 120, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 130, 3),
]);
}
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 98788a3..a7945a6 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -770,10 +770,6 @@
_writeln('IndexExpression');
_withIndent(() {
var properties = _Properties();
- properties.addAuxiliaryElements(
- 'auxiliaryElements',
- node.auxiliaryElements,
- );
properties.addNode('index', node.index);
properties.addToken('period', node.period);
properties.addNode('target', node.target);
@@ -1801,17 +1797,6 @@
}
}
-class _AuxiliaryElementsProperty extends _Property {
- final AuxiliaryElements elements;
-
- _AuxiliaryElementsProperty(String name, this.elements) : super(name);
-
- @override
- void write(ResolvedAstPrinter printer) {
- printer._writeAuxiliaryElements(name, elements);
- }
-}
-
class _ElementProperty extends _Property {
final Element element;
@@ -1848,12 +1833,6 @@
class _Properties {
final properties = <_Property>[];
- void addAuxiliaryElements(String name, AuxiliaryElements elements) {
- properties.add(
- _AuxiliaryElementsProperty(name, elements),
- );
- }
-
void addElement(String name, Element element) {
properties.add(
_ElementProperty(name, element),