File tree Expand file tree Collapse file tree 2 files changed +27
-5
lines changed Expand file tree Collapse file tree 2 files changed +27
-5
lines changed Original file line number Diff line number Diff line change 4
4
5
5
import 'package:analyzer/dart/element/type.dart' ;
6
6
import 'package:analyzer/src/dart/element/replacement_visitor.dart' ;
7
+ import 'package:analyzer/src/dart/element/type.dart' ;
7
8
import 'package:analyzer/src/dart/element/type_system.dart' ;
8
9
import 'package:meta/meta.dart' ;
9
10
@@ -53,6 +54,16 @@ class ReplaceTopBottomVisitor extends ReplacementVisitor {
53
54
return _isCovariant ? null : _topType;
54
55
}
55
56
57
+ @override
58
+ DartType visitTypeParameterType (TypeParameterType type) {
59
+ if (! _isCovariant && _typeSystem.isNonNullableByDefault) {
60
+ if (_typeSystem.isSubtypeOf2 (type, NeverTypeImpl .instance)) {
61
+ return _typeSystem.objectQuestion;
62
+ }
63
+ }
64
+ return null ;
65
+ }
66
+
56
67
@override
57
68
DartType visitVoidType (VoidType type) {
58
69
return _isCovariant ? _bottomType : null ;
Original file line number Diff line number Diff line change @@ -79,11 +79,22 @@ class ReplaceTopBottomNullSafetyTest extends AbstractTypeSystemNullSafetyTest {
79
79
// Not contravariant.
80
80
_check (neverNone, 'Never' );
81
81
82
- _check (
83
- functionTypeNone (returnType: intNone, parameters: [
84
- requiredParameter (type: neverNone),
85
- ]),
86
- 'int Function(Object?)' ,
82
+ void checkContravariant (DartType type, String expectedStr) {
83
+ _check (
84
+ functionTypeNone (returnType: intNone, parameters: [
85
+ requiredParameter (type: type),
86
+ ]),
87
+ 'int Function($expectedStr )' ,
88
+ );
89
+ }
90
+
91
+ checkContravariant (neverNone, 'Object?' );
92
+
93
+ checkContravariant (
94
+ typeParameterTypeNone (
95
+ typeParameter ('T' , bound: neverNone),
96
+ ),
97
+ 'Object?' ,
87
98
);
88
99
}
89
100
You can’t perform that action at this time.
0 commit comments