Update assertSimpleIdentifier() to accept separate 'readElement' and 'writeElement'.
Not yet fully enforced, and probably not fully implemented currently.
R=brianwilkerson@google.com
Change-Id: Ibbb43506cf7abb4104d348077e2d5bafeb60ba0e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/158504
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index e6cd991..b1dc776 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -8415,10 +8415,11 @@
SimpleIdentifier identifier = prefixed.identifier;
assertSimpleIdentifier(
identifier,
- element: elementMatcher(
+ readElement: elementMatcher(
objectHashCode,
isLegacy: isNullSafetySdkAndLegacyLibrary,
),
+ writeElement: null,
type: 'int',
);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 629a69a..2761663 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -67,9 +67,12 @@
);
assertType(assignment, 'num'); // num + int = num
- SimpleIdentifier left = assignment.leftHandSide;
- assertElement(left, findElement.localVar('v'));
- assertType(left, 'num');
+ assertSimpleIdentifier(
+ assignment.leftHandSide,
+ readElement: findElement.localVar('v'),
+ writeElement: findElement.localVar('v'),
+ type: 'num',
+ );
Expression right = assignment.rightHandSide;
assertType(right, 'int');
@@ -376,9 +379,12 @@
assertElementNull(assignment);
assertType(assignment, 'int');
- SimpleIdentifier left = assignment.leftHandSide;
- assertElement(left, findElement.localVar('v'));
- assertType(left, 'num');
+ assertSimpleIdentifier(
+ assignment.leftHandSide,
+ readElement: null,
+ writeElement: findElement.localVar('v'),
+ type: 'num',
+ );
Expression right = assignment.rightHandSide;
assertType(right, 'int');
@@ -550,9 +556,12 @@
assertElementNull(assignment);
assertType(assignment, 'int');
- SimpleIdentifier left = assignment.leftHandSide;
- assertElement(left, findElement.setter('f'));
- assertType(left, 'num');
+ assertSimpleIdentifier(
+ assignment.leftHandSide,
+ readElement: null,
+ writeElement: findElement.setter('f'),
+ type: 'num',
+ );
var right = assignment.rightHandSide;
assertType(right, 'int');
@@ -569,9 +578,12 @@
assertElementNull(assignment);
assertType(assignment, 'int');
- SimpleIdentifier left = assignment.leftHandSide;
- assertElement(left, findElement.topSet('v'));
- assertType(left, 'num');
+ assertSimpleIdentifier(
+ assignment.leftHandSide,
+ readElement: null,
+ writeElement: findElement.topSet('v'),
+ type: 'num',
+ );
var right = assignment.rightHandSide;
assertType(right, 'int');
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index 74fe485..dfd1530 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -64,7 +64,8 @@
assertSimpleIdentifier(
findNode.simple('x++'),
- element: findElement.topSet('x'),
+ readElement: findElement.topGet('x'),
+ writeElement: findElement.topSet('x'),
type: 'num',
);
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index 1bf149e..163de13 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -164,7 +164,8 @@
assertSimpleIdentifier(
findNode.simple('foo?'),
- element: findElement.topGet('foo'),
+ readElement: findElement.topGet('foo'),
+ writeElement: null,
type: 'A?',
);
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index f9dc242..e6f5143 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -594,11 +594,30 @@
void assertSimpleIdentifier(
SimpleIdentifier node, {
- @required Object element,
+ @required Object readElement,
+ @required Object writeElement,
@required String type,
}) {
- assertElement(node.staticElement, element);
- assertType(node, type);
+ var isRead = node.inGetterContext();
+ var isWrite = node.inSetterContext();
+ if (isRead && isWrite) {
+ // TODO(scheglov) enable this
+// assertElement(node.auxiliaryElements?.staticElement, readElement);
+ assertElement(node.staticElement, writeElement);
+ } else if (isRead) {
+ assertElement(node.staticElement, readElement);
+ } else {
+ expect(isWrite, isTrue);
+ assertElement(node.staticElement, writeElement);
+ }
+
+ if (isRead) {
+ assertType(node, type);
+ } else {
+ // TODO(scheglov) enforce this
+// expect(type, isNull);
+// assertTypeNull(node);
+ }
}
void assertSubstitution(
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index 76881d5..1214c58 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -27,7 +27,8 @@
assertSimpleIdentifier(
findNode.simple('dynamic;'),
- element: dynamicElement,
+ readElement: dynamicElement,
+ writeElement: null,
type: 'Type',
);
}
@@ -45,7 +46,8 @@
assertSimpleIdentifier(
findNode.simple('dynamic;'),
- element: null,
+ readElement: null,
+ writeElement: null,
type: 'dynamic',
);
}
@@ -59,7 +61,8 @@
assertSimpleIdentifier(
findNode.simple('dynamic;'),
- element: dynamicElement,
+ readElement: dynamicElement,
+ writeElement: null,
type: 'Type',
);
}
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index 0cfcca7..440c7a7 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -386,7 +386,8 @@
assertSimpleIdentifier(
findNode.simple('foo'),
- element: null,
+ readElement: null,
+ writeElement: null,
type: 'Never',
);
}
@@ -400,7 +401,8 @@
assertSimpleIdentifier(
findNode.simple('hashCode'),
- element: objectElement.getGetter('hashCode'),
+ readElement: objectElement.getGetter('hashCode'),
+ writeElement: null,
type: 'Never',
);
}
@@ -416,7 +418,8 @@
assertSimpleIdentifier(
findNode.simple('foo'),
- element: null,
+ readElement: null,
+ writeElement: null,
type: 'Never',
);
@@ -436,7 +439,8 @@
assertSimpleIdentifier(
findNode.simple('toString'),
- element: objectElement.getMethod('toString'),
+ readElement: objectElement.getMethod('toString'),
+ writeElement: null,
type: 'Never',
);
}
@@ -452,7 +456,8 @@
assertSimpleIdentifier(
findNode.simple('foo'),
- element: null,
+ readElement: null,
+ writeElement: null,
type: 'Never',
);
@@ -474,7 +479,8 @@
assertSimpleIdentifier(
findNode.simple('foo'),
- element: null,
+ readElement: null,
+ writeElement: null,
type: 'dynamic',
);
}
@@ -488,7 +494,8 @@
assertSimpleIdentifier(
findNode.simple('hashCode'),
- element: objectElement.getGetter('hashCode'),
+ readElement: objectElement.getGetter('hashCode'),
+ writeElement: null,
type: 'int',
);
}
@@ -502,7 +509,8 @@
assertSimpleIdentifier(
findNode.simple('toString'),
- element: objectElement.getMethod('toString'),
+ readElement: objectElement.getMethod('toString'),
+ writeElement: null,
type: 'String Function()',
);
}
@@ -571,10 +579,11 @@
assertSimpleIdentifier(
findNode.simple('toString'),
- element: elementMatcher(
+ readElement: elementMatcher(
objectElement.getMethod('toString'),
isLegacy: isNullSafetySdkAndLegacyLibrary,
),
+ writeElement: null,
type: 'String Function()',
);
}
@@ -588,10 +597,11 @@
assertSimpleIdentifier(
findNode.simple('hashCode'),
- element: elementMatcher(
+ readElement: elementMatcher(
objectElement.getGetter('hashCode'),
isLegacy: isNullSafetySdkAndLegacyLibrary,
),
+ writeElement: null,
type: 'int',
);
}
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
index 6e71b13..e59a967 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
@@ -764,7 +764,8 @@
]);
assertSimpleIdentifier(
findNode.simple('isEven'),
- element: intElement.getGetter('isEven'),
+ readElement: intElement.getGetter('isEven'),
+ writeElement: null,
type: 'bool',
);
}