File tree Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Original file line number Diff line number Diff line change @@ -638,12 +638,10 @@ $stackTrace''');
638
638
staticElement is LocalVariableElement ) {
639
639
return getOrComputeElementType (staticElement);
640
640
} 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 ];
647
645
} else if (staticElement is ClassElement ) {
648
646
return _nonNullableTypeType;
649
647
} else {
Original file line number Diff line number Diff line change @@ -1662,6 +1662,24 @@ int f() {
1662
1662
assertNoUpstreamNullability (decoratedTypeAnnotation ('int' ).node);
1663
1663
}
1664
1664
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
+
1665
1683
test_topLevelVar_reference () async {
1666
1684
await analyze ('''
1667
1685
double pi = 3.1415;
You can’t perform that action at this time.
0 commit comments