Skip to content

Commit d0a22c7

Browse files
Dan Rubelcommit-bot@chromium.org
authored andcommitted
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>
1 parent 6089a94 commit d0a22c7

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

pkg/nnbd_migration/lib/src/graph_builder.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -638,12 +638,10 @@ $stackTrace''');
638638
staticElement is LocalVariableElement) {
639639
return getOrComputeElementType(staticElement);
640640
} else if (staticElement is PropertyAccessorElement) {
641-
if (staticElement.isGetter) {
642-
return getOrComputeElementType(staticElement).returnType;
643-
} else {
644-
// TODO(danrubel) handle setter
645-
_unimplemented(node, 'Setter');
646-
}
641+
var elementType = getOrComputeElementType(staticElement);
642+
return staticElement.isGetter
643+
? elementType.returnType
644+
: elementType.positionalParameters[0];
647645
} else if (staticElement is ClassElement) {
648646
return _nonNullableTypeType;
649647
} else {

pkg/nnbd_migration/test/graph_builder_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,6 +1662,24 @@ int f() {
16621662
assertNoUpstreamNullability(decoratedTypeAnnotation('int').node);
16631663
}
16641664

1665+
test_topLevelSetter() async {
1666+
await analyze('''
1667+
void set x(int value) {}
1668+
main() { x = 1; }
1669+
''');
1670+
var setXType = decoratedTypeAnnotation('int value');
1671+
assertEdge(never, setXType.node, hard: false);
1672+
}
1673+
1674+
test_topLevelSetter_nullable() async {
1675+
await analyze('''
1676+
void set x(int value) {}
1677+
main() { x = null; }
1678+
''');
1679+
var setXType = decoratedTypeAnnotation('int value');
1680+
assertEdge(always, setXType.node, hard: false);
1681+
}
1682+
16651683
test_topLevelVar_reference() async {
16661684
await analyze('''
16671685
double pi = 3.1415;

0 commit comments

Comments
 (0)