@@ -24,7 +24,7 @@ class ConstructorMember extends ExecutableMember
24
24
/// Initialize a newly created element to represent a constructor, based on
25
25
/// the [declaration] , and applied [substitution] .
26
26
ConstructorMember (
27
- TypeProviderImpl typeProvider,
27
+ TypeProviderImpl ? typeProvider,
28
28
ConstructorElement declaration,
29
29
MapSubstitution substitution,
30
30
bool isLegacy,
@@ -138,7 +138,7 @@ abstract class ExecutableMember extends Member implements ExecutableElement {
138
138
/// their bounds. The [substitution] includes replacing [declaration] type
139
139
/// parameters with the provided fresh [typeParameters] .
140
140
ExecutableMember (
141
- TypeProviderImpl typeProvider,
141
+ TypeProviderImpl ? typeProvider,
142
142
ExecutableElement declaration,
143
143
MapSubstitution substitution,
144
144
bool isLegacy,
@@ -178,6 +178,12 @@ abstract class ExecutableMember extends Member implements ExecutableElement {
178
178
@override
179
179
bool get isSynchronous => declaration.isSynchronous;
180
180
181
+ @override
182
+ LibraryElement get library => _declaration.library! ;
183
+
184
+ @override
185
+ Source get librarySource => _declaration.librarySource! ;
186
+
181
187
@override
182
188
List <ParameterElement > get parameters {
183
189
return declaration.parameters.map <ParameterElement >((p) {
@@ -220,7 +226,7 @@ abstract class ExecutableMember extends Member implements ExecutableElement {
220
226
ExecutableElement element,
221
227
MapSubstitution substitution,
222
228
) {
223
- TypeProviderImpl typeProvider;
229
+ TypeProviderImpl ? typeProvider;
224
230
var isLegacy = false ;
225
231
var combined = substitution;
226
232
if (element is ExecutableMember ) {
@@ -261,7 +267,7 @@ abstract class ExecutableMember extends Member implements ExecutableElement {
261
267
class FieldFormalParameterMember extends ParameterMember
262
268
implements FieldFormalParameterElement {
263
269
factory FieldFormalParameterMember (
264
- TypeProviderImpl typeProvider,
270
+ TypeProviderImpl ? typeProvider,
265
271
FieldFormalParameterElement declaration,
266
272
MapSubstitution substitution,
267
273
bool isLegacy,
@@ -280,7 +286,7 @@ class FieldFormalParameterMember extends ParameterMember
280
286
}
281
287
282
288
FieldFormalParameterMember ._(
283
- TypeProviderImpl typeProvider,
289
+ TypeProviderImpl ? typeProvider,
284
290
FieldFormalParameterElement declaration,
285
291
MapSubstitution substitution,
286
292
bool isLegacy,
@@ -320,7 +326,7 @@ class FieldMember extends VariableMember implements FieldElement {
320
326
/// Initialize a newly created element to represent a field, based on the
321
327
/// [declaration] , with applied [substitution] .
322
328
FieldMember (
323
- TypeProviderImpl typeProvider,
329
+ TypeProviderImpl ? typeProvider,
324
330
FieldElement declaration,
325
331
MapSubstitution substitution,
326
332
bool isLegacy,
@@ -360,6 +366,9 @@ class FieldMember extends VariableMember implements FieldElement {
360
366
@override
361
367
bool get isExternal => declaration.isExternal;
362
368
369
+ @override
370
+ LibraryElement get library => _declaration.library! ;
371
+
363
372
@override
364
373
String get name => declaration.name;
365
374
@@ -406,8 +415,8 @@ class FieldMember extends VariableMember implements FieldElement {
406
415
}
407
416
408
417
class FunctionMember extends ExecutableMember implements FunctionElement {
409
- FunctionMember (
410
- TypeProviderImpl typeProvider, FunctionElement declaration, bool isLegacy)
418
+ FunctionMember (TypeProviderImpl ? typeProvider, FunctionElement declaration,
419
+ bool isLegacy)
411
420
: super (
412
421
typeProvider,
413
422
declaration,
@@ -441,7 +450,7 @@ class FunctionMember extends ExecutableMember implements FunctionElement {
441
450
/// parameters are known.
442
451
abstract class Member implements Element {
443
452
/// A type provider (might be legacy, might be null-safe).
444
- final TypeProviderImpl _typeProvider;
453
+ final TypeProviderImpl ? _typeProvider;
445
454
446
455
/// The element on which the parameterized element was created.
447
456
final Element _declaration;
@@ -459,6 +468,10 @@ abstract class Member implements Element {
459
468
if (_declaration is Member ) {
460
469
throw StateError ('Members must be created from a declarations.' );
461
470
}
471
+ if (_typeProvider == null && isLegacy) {
472
+ throw StateError (
473
+ 'A type provider must be supplied for legacy conversion' );
474
+ }
462
475
}
463
476
464
477
@override
@@ -552,10 +565,10 @@ abstract class Member implements Element {
552
565
ElementKind get kind => _declaration.kind;
553
566
554
567
@override
555
- LibraryElement get library => _declaration.library! ;
568
+ LibraryElement ? get library => _declaration.library;
556
569
557
570
@override
558
- Source get librarySource => _declaration.librarySource! ;
571
+ Source ? get librarySource => _declaration.librarySource;
559
572
560
573
@override
561
574
ElementLocation get location => _declaration.location! ;
@@ -642,7 +655,7 @@ abstract class Member implements Element {
642
655
/// Otherwise, return the type unchanged.
643
656
DartType _toLegacyType (DartType type) {
644
657
if (isLegacy) {
645
- return NullabilityEliminator .perform (_typeProvider, type);
658
+ return NullabilityEliminator .perform (_typeProvider! , type);
646
659
} else {
647
660
return type;
648
661
}
@@ -720,7 +733,7 @@ abstract class Member implements Element {
720
733
/// type parameters are known.
721
734
class MethodMember extends ExecutableMember implements MethodElement {
722
735
factory MethodMember (
723
- TypeProviderImpl typeProvider,
736
+ TypeProviderImpl ? typeProvider,
724
737
MethodElement declaration,
725
738
MapSubstitution substitution,
726
739
bool isLegacy,
@@ -739,7 +752,7 @@ class MethodMember extends ExecutableMember implements MethodElement {
739
752
}
740
753
741
754
MethodMember ._(
742
- TypeProviderImpl typeProvider,
755
+ TypeProviderImpl ? typeProvider,
743
756
MethodElement declaration,
744
757
MapSubstitution substitution,
745
758
bool isLegacy,
@@ -799,7 +812,7 @@ class ParameterMember extends VariableMember
799
812
final List <TypeParameterElement > typeParameters;
800
813
801
814
factory ParameterMember (
802
- TypeProviderImpl typeProvider,
815
+ TypeProviderImpl ? typeProvider,
803
816
ParameterElement declaration,
804
817
MapSubstitution substitution,
805
818
bool isLegacy,
@@ -820,7 +833,7 @@ class ParameterMember extends VariableMember
820
833
/// Initialize a newly created element to represent a parameter, based on the
821
834
/// [declaration] , with applied [substitution] .
822
835
ParameterMember ._(
823
- TypeProviderImpl typeProvider,
836
+ TypeProviderImpl ? typeProvider,
824
837
ParameterElement declaration,
825
838
MapSubstitution substitution,
826
839
bool isLegacy,
@@ -887,14 +900,41 @@ class ParameterMember extends VariableMember
887
900
super .visitChildren (visitor);
888
901
safelyVisitChildren (parameters, visitor);
889
902
}
903
+
904
+ static ParameterElement from (
905
+ ParameterElement element, MapSubstitution substitution) {
906
+ TypeProviderImpl ? typeProvider;
907
+ var isLegacy = false ;
908
+ var combined = substitution;
909
+ if (element is ParameterMember ) {
910
+ var member = element;
911
+ element = member.declaration;
912
+ typeProvider = member._typeProvider;
913
+
914
+ isLegacy = member.isLegacy;
915
+
916
+ var map = < TypeParameterElement , DartType > {};
917
+ for (var entry in member._substitution.map.entries) {
918
+ map[entry.key] = substitution.substituteType (entry.value);
919
+ }
920
+ map.addAll (substitution.map);
921
+ combined = Substitution .fromMap (map);
922
+ }
923
+
924
+ if (! isLegacy && combined.map.isEmpty) {
925
+ return element;
926
+ }
927
+
928
+ return ParameterMember (typeProvider, element, combined, isLegacy);
929
+ }
890
930
}
891
931
892
932
/// A property accessor element defined in a parameterized type where the values
893
933
/// of the type parameters are known.
894
934
class PropertyAccessorMember extends ExecutableMember
895
935
implements PropertyAccessorElement {
896
936
factory PropertyAccessorMember (
897
- TypeProviderImpl typeProvider,
937
+ TypeProviderImpl ? typeProvider,
898
938
PropertyAccessorElement declaration,
899
939
MapSubstitution substitution,
900
940
bool isLegacy,
@@ -913,7 +953,7 @@ class PropertyAccessorMember extends ExecutableMember
913
953
}
914
954
915
955
PropertyAccessorMember ._(
916
- TypeProviderImpl typeProvider,
956
+ TypeProviderImpl ? typeProvider,
917
957
PropertyAccessorElement declaration,
918
958
MapSubstitution substitution,
919
959
bool isLegacy,
@@ -1005,7 +1045,7 @@ class PropertyAccessorMember extends ExecutableMember
1005
1045
class SuperFormalParameterMember extends ParameterMember
1006
1046
implements SuperFormalParameterElement {
1007
1047
factory SuperFormalParameterMember (
1008
- TypeProviderImpl typeProvider,
1048
+ TypeProviderImpl ? typeProvider,
1009
1049
SuperFormalParameterElement declaration,
1010
1050
MapSubstitution substitution,
1011
1051
bool isLegacy,
@@ -1024,7 +1064,7 @@ class SuperFormalParameterMember extends ParameterMember
1024
1064
}
1025
1065
1026
1066
SuperFormalParameterMember ._(
1027
- TypeProviderImpl typeProvider,
1067
+ TypeProviderImpl ? typeProvider,
1028
1068
SuperFormalParameterElement declaration,
1029
1069
MapSubstitution substitution,
1030
1070
bool isLegacy,
@@ -1063,7 +1103,7 @@ class SuperFormalParameterMember extends ParameterMember
1063
1103
class TopLevelVariableMember extends VariableMember
1064
1104
implements TopLevelVariableElement {
1065
1105
TopLevelVariableMember (
1066
- TypeProviderImpl typeProvider,
1106
+ TypeProviderImpl ? typeProvider,
1067
1107
VariableElement declaration,
1068
1108
MapSubstitution substitution,
1069
1109
bool isLegacy,
@@ -1092,6 +1132,9 @@ class TopLevelVariableMember extends VariableMember
1092
1132
@override
1093
1133
bool get isExternal => declaration.isExternal;
1094
1134
1135
+ @override
1136
+ LibraryElement get library => _declaration.library! ;
1137
+
1095
1138
@override
1096
1139
String get name => declaration.name;
1097
1140
@@ -1119,7 +1162,7 @@ abstract class VariableMember extends Member implements VariableElement {
1119
1162
/// Initialize a newly created element to represent a variable, based on the
1120
1163
/// [declaration] , with applied [substitution] .
1121
1164
VariableMember (
1122
- TypeProviderImpl typeProvider,
1165
+ TypeProviderImpl ? typeProvider,
1123
1166
VariableElement declaration,
1124
1167
MapSubstitution substitution,
1125
1168
bool isLegacy,
0 commit comments