@@ -8,12 +8,19 @@ import 'package:analyzer/dart/element/type.dart';
88import 'package:analyzer/src/dart/element/element.dart' ;
99import 'package:analyzer/src/dart/element/type.dart' ;
1010import 'package:analyzer/src/dart/element/type_algebra.dart' ;
11+ import 'package:analyzer/src/dart/element/type_provider.dart' ;
1112import 'package:analyzer/src/dart/element/type_visitor.dart' ;
13+ import 'package:analyzer/src/generated/resolver.dart' ;
1214import 'package:analyzer/src/generated/type_system.dart' ;
15+ import 'package:analyzer/src/generated/utilities_dart.dart' ;
1316
1417class NullabilityEliminator extends DartTypeVisitor <DartType > {
18+ final TypeProviderImpl _typeProvider;
19+
1520 int _counter = 0 ;
1621
22+ NullabilityEliminator (this ._typeProvider);
23+
1724 @override
1825 DartType defaultDartType (DartType type) {
1926 throw UnimplementedError ('(${type .runtimeType }) $type ' );
@@ -35,10 +42,7 @@ class NullabilityEliminator extends DartTypeVisitor<DartType> {
3542
3643 type = _freshTypeParameters (type);
3744
38- var parameters = type.parameters.map ((parameter) {
39- var type = visit (parameter.type);
40- return _parameterElement (parameter, type);
41- }).toList ();
45+ var parameters = type.parameters.map (_parameterElement).toList ();
4246
4347 var returnType = visit (type.returnType);
4448 var typeArguments = type.typeArguments.map (visit).toList ();
@@ -79,7 +83,8 @@ class NullabilityEliminator extends DartTypeVisitor<DartType> {
7983
8084 @override
8185 DartType visitNeverType (NeverTypeImpl type) {
82- return type.withNullability (NullabilitySuffix .star);
86+ _counter++ ;
87+ return _typeProvider.nullStar;
8388 }
8489
8590 @override
@@ -159,28 +164,33 @@ class NullabilityEliminator extends DartTypeVisitor<DartType> {
159164 }
160165 }
161166
162- /// If the [type] itself, or any of its components, has any nullability,
163- /// return a new type with legacy nullability suffixes. Otherwise return the
164- /// original instance.
165- static T perform <T extends DartType >(T type) {
166- if (type == null ) {
167- return type;
168- }
167+ ParameterElementImpl _parameterElement (ParameterElement parameter) {
168+ var type = visit (parameter.type);
169169
170- return NullabilityEliminator ().visit (type);
171- }
170+ // ignore: deprecated_member_use_from_same_package
171+ var parameterKind = parameter.parameterKind;
172+ if (parameter.isRequiredNamed) {
173+ parameterKind = ParameterKind .NAMED ;
174+ _counter++ ;
175+ }
172176
173- static ParameterElementImpl _parameterElement (
174- ParameterElement parameter,
175- DartType type,
176- ) {
177177 var result = ParameterElementImpl .synthetic (
178178 parameter.name,
179179 type,
180- // ignore: deprecated_member_use_from_same_package
181- parameter.parameterKind,
180+ parameterKind,
182181 );
183182 result.isExplicitlyCovariant = parameter.isCovariant;
184183 return result;
185184 }
185+
186+ /// If the [type] itself, or any of its components, has any nullability,
187+ /// return a new type with legacy nullability suffixes. Otherwise return the
188+ /// original instance.
189+ static T perform <T extends DartType >(TypeProviderImpl typeProvider, T type) {
190+ if (type == null ) {
191+ return type;
192+ }
193+
194+ return NullabilityEliminator (typeProvider).visit (type);
195+ }
186196}
0 commit comments