add migration engine support for top level setters
Change-Id: I436e673370ed0094b0615d99796f117145c8fbaf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106923
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/nnbd_migration/lib/src/graph_builder.dart b/pkg/nnbd_migration/lib/src/graph_builder.dart
index 19d1efd..a6942d2 100644
--- a/pkg/nnbd_migration/lib/src/graph_builder.dart
+++ b/pkg/nnbd_migration/lib/src/graph_builder.dart
@@ -638,12 +638,10 @@
staticElement is LocalVariableElement) {
return getOrComputeElementType(staticElement);
} else if (staticElement is PropertyAccessorElement) {
- if (staticElement.isGetter) {
- return getOrComputeElementType(staticElement).returnType;
- } else {
- // TODO(danrubel) handle setter
- _unimplemented(node, 'Setter');
- }
+ var elementType = getOrComputeElementType(staticElement);
+ return staticElement.isGetter
+ ? elementType.returnType
+ : elementType.positionalParameters[0];
} else if (staticElement is ClassElement) {
return _nonNullableTypeType;
} else {
diff --git a/pkg/nnbd_migration/test/graph_builder_test.dart b/pkg/nnbd_migration/test/graph_builder_test.dart
index 31b274b..d9a7a43 100644
--- a/pkg/nnbd_migration/test/graph_builder_test.dart
+++ b/pkg/nnbd_migration/test/graph_builder_test.dart
@@ -1662,6 +1662,24 @@
assertNoUpstreamNullability(decoratedTypeAnnotation('int').node);
}
+ test_topLevelSetter() async {
+ await analyze('''
+void set x(int value) {}
+main() { x = 1; }
+''');
+ var setXType = decoratedTypeAnnotation('int value');
+ assertEdge(never, setXType.node, hard: false);
+ }
+
+ test_topLevelSetter_nullable() async {
+ await analyze('''
+void set x(int value) {}
+main() { x = null; }
+''');
+ var setXType = decoratedTypeAnnotation('int value');
+ assertEdge(always, setXType.node, hard: false);
+ }
+
test_topLevelVar_reference() async {
await analyze('''
double pi = 3.1415;