@@ -311,14 +311,24 @@ abstract class ExecutableMember extends Member
311
311
312
312
@override
313
313
List <ParameterElementMixin > get parameters {
314
- return declaration.parameters.map <ParameterElementMixin >((p) {
315
- if (p is FieldFormalParameterElementImpl ) {
316
- return FieldFormalParameterMember (p, substitution);
314
+ return declaration.parameters.map <ParameterElementMixin >((element) {
315
+ switch (element) {
316
+ case FieldFormalParameterElementImpl ():
317
+ return FieldFormalParameterMember (
318
+ declaration: element,
319
+ substitution: substitution,
320
+ );
321
+ case SuperFormalParameterElementImpl ():
322
+ return SuperFormalParameterMember (
323
+ declaration: element,
324
+ substitution: substitution,
325
+ );
326
+ default :
327
+ return ParameterMember (
328
+ declaration: element,
329
+ substitution: substitution,
330
+ );
317
331
}
318
- if (p is SuperFormalParameterElementImpl ) {
319
- return SuperFormalParameterMember (p, substitution);
320
- }
321
- return ParameterMember (p, substitution);
322
332
}).toList ();
323
333
}
324
334
@@ -394,17 +404,20 @@ abstract class ExecutableMember extends Member
394
404
ExecutableElement element,
395
405
MapSubstitution substitution,
396
406
) {
407
+ ExecutableElementImpl declaration;
397
408
var combined = substitution;
398
409
if (element is ExecutableMember ) {
399
410
ExecutableMember member = element;
400
- element = member.declaration;
411
+ declaration = member.declaration;
401
412
402
413
var map = < TypeParameterElement2 , DartType > {
403
414
for (var MapEntry (: key, : value) in member.substitution.map.entries)
404
415
key: substitution.substituteType (value),
405
416
...substitution.map,
406
417
};
407
418
combined = Substitution .fromMap2 (map);
419
+ } else {
420
+ declaration = element as ExecutableElementImpl ;
408
421
}
409
422
410
423
if (combined.map.isEmpty) {
@@ -413,17 +426,24 @@ abstract class ExecutableMember extends Member
413
426
return element as ExecutableElementOrMember ;
414
427
}
415
428
416
- if (element is ConstructorElement ) {
417
- return ConstructorMember (
418
- declaration: element,
419
- substitution: combined,
420
- );
421
- } else if (element is MethodElement ) {
422
- return MethodMember (element, combined);
423
- } else if (element is PropertyAccessorElement ) {
424
- return PropertyAccessorMember (element, combined);
425
- } else {
426
- throw UnimplementedError ('(${element .runtimeType }) $element ' );
429
+ switch (declaration) {
430
+ case ConstructorElementImpl ():
431
+ return ConstructorMember (
432
+ declaration: declaration,
433
+ substitution: combined,
434
+ );
435
+ case MethodElementImpl ():
436
+ return MethodMember (
437
+ declaration: declaration,
438
+ substitution: combined,
439
+ );
440
+ case PropertyAccessorElementImpl ():
441
+ return PropertyAccessorMember (
442
+ declaration: declaration,
443
+ substitution: combined,
444
+ );
445
+ default :
446
+ throw UnimplementedError ('(${declaration .runtimeType }) $element ' );
427
447
}
428
448
}
429
449
}
@@ -432,10 +452,10 @@ abstract class ExecutableMember extends Member
432
452
/// type parameters are known.
433
453
class FieldFormalParameterMember extends ParameterMember
434
454
implements FieldFormalParameterElement {
435
- factory FieldFormalParameterMember (
436
- FieldFormalParameterElement declaration,
437
- MapSubstitution substitution,
438
- ) {
455
+ factory FieldFormalParameterMember ({
456
+ required FieldFormalParameterElement declaration,
457
+ required MapSubstitution substitution,
458
+ } ) {
439
459
var freshTypeParameters = _SubstitutedTypeParameters (
440
460
declaration.typeParameters,
441
461
substitution,
@@ -532,7 +552,10 @@ class FieldMember extends VariableMember
532
552
if (baseGetter == null ) {
533
553
return null ;
534
554
}
535
- return PropertyAccessorMember (baseGetter, substitution);
555
+ return PropertyAccessorMember (
556
+ declaration: baseGetter,
557
+ substitution: substitution,
558
+ );
536
559
}
537
560
538
561
@override
@@ -593,7 +616,10 @@ class FieldMember extends VariableMember
593
616
if (baseSetter == null ) {
594
617
return null ;
595
618
}
596
- return PropertyAccessorMember (baseSetter, substitution);
619
+ return PropertyAccessorMember (
620
+ declaration: baseSetter,
621
+ substitution: substitution,
622
+ );
597
623
}
598
624
599
625
@override
@@ -998,10 +1024,10 @@ abstract class Member implements Element, ElementOrMember {
998
1024
/// type parameters are known.
999
1025
class MethodMember extends ExecutableMember
1000
1026
implements MethodElementOrMember , MethodElement2OrMember {
1001
- factory MethodMember (
1002
- MethodElement declaration,
1003
- MapSubstitution substitution,
1004
- ) {
1027
+ factory MethodMember ({
1028
+ required MethodElement declaration,
1029
+ required MapSubstitution substitution,
1030
+ } ) {
1005
1031
var freshTypeParameters = _SubstitutedTypeParameters (
1006
1032
declaration.typeParameters,
1007
1033
substitution,
@@ -1068,39 +1094,19 @@ class MethodMember extends ExecutableMember
1068
1094
return visitor.visitMethodElement (this );
1069
1095
}
1070
1096
1071
- /// If the given [method] 's type is different when any type parameters from
1072
- /// the defining type's declaration are replaced with the actual type
1073
- /// arguments from the [definingType] , create a method member representing the
1074
- /// given method. Return the member that was created, or the base method if no
1075
- /// member was created.
1076
- static MethodElementOrMember ? from (
1077
- MethodElement ? method, InterfaceType definingType) {
1078
- if (method == null || definingType.typeArguments.isEmpty) {
1079
- // TODO(paulberry): eliminate this cast by changing the type of the
1080
- // `method` parameter.
1081
- return method as MethodElementOrMember ? ;
1082
- }
1083
-
1084
- return MethodMember (
1085
- method,
1086
- Substitution .fromInterfaceType (definingType),
1087
- );
1088
- }
1089
-
1090
- /// If the given [method] 's type is different when any type parameters from
1091
- /// the defining type's declaration are replaced with the actual type
1092
- /// arguments from the [definingType] , create a method member representing the
1093
- /// given method. Return the member that was created, or the base method if no
1094
- /// member was created.
1097
+ /// If [definingType] has type parameters, returns [MethodMember] with
1098
+ /// type substitutions. Otherwise returns [element] as is.
1095
1099
static MethodElement2OrMember from2 (
1096
- MethodElementImpl2 element, InterfaceType definingType) {
1100
+ MethodElementImpl2 element,
1101
+ InterfaceType definingType,
1102
+ ) {
1097
1103
if (definingType.typeArguments.isEmpty) {
1098
1104
return element;
1099
1105
}
1100
1106
1101
1107
return MethodMember (
1102
- element.asElement,
1103
- Substitution .fromInterfaceType (definingType),
1108
+ declaration : element.asElement,
1109
+ substitution : Substitution .fromInterfaceType (definingType),
1104
1110
);
1105
1111
}
1106
1112
}
@@ -1113,10 +1119,10 @@ class ParameterMember extends VariableMember
1113
1119
@override
1114
1120
final List <TypeParameterElement > typeParameters;
1115
1121
1116
- factory ParameterMember (
1117
- ParameterElement declaration,
1118
- MapSubstitution substitution,
1119
- ) {
1122
+ factory ParameterMember ({
1123
+ required ParameterElement declaration,
1124
+ required MapSubstitution substitution,
1125
+ } ) {
1120
1126
var freshTypeParameters = _SubstitutedTypeParameters (
1121
1127
declaration.typeParameters,
1122
1128
substitution,
@@ -1301,7 +1307,10 @@ class ParameterMember extends VariableMember
1301
1307
return element;
1302
1308
}
1303
1309
1304
- return ParameterMember (element, combined);
1310
+ return ParameterMember (
1311
+ declaration: element,
1312
+ substitution: combined,
1313
+ );
1305
1314
}
1306
1315
}
1307
1316
@@ -1311,10 +1320,10 @@ abstract class PropertyAccessorMember extends ExecutableMember
1311
1320
implements
1312
1321
PropertyAccessorElementOrMember ,
1313
1322
PropertyAccessorElement2OrMember {
1314
- factory PropertyAccessorMember (
1315
- PropertyAccessorElement declaration,
1316
- MapSubstitution substitution,
1317
- ) {
1323
+ factory PropertyAccessorMember ({
1324
+ required PropertyAccessorElement declaration,
1325
+ required MapSubstitution substitution,
1326
+ } ) {
1318
1327
var freshTypeParameters = _SubstitutedTypeParameters (
1319
1328
declaration.typeParameters,
1320
1329
substitution,
@@ -1346,7 +1355,10 @@ abstract class PropertyAccessorMember extends ExecutableMember
1346
1355
if (baseGetter == null ) {
1347
1356
return null ;
1348
1357
}
1349
- return PropertyAccessorMember (baseGetter, substitution);
1358
+ return PropertyAccessorMember (
1359
+ declaration: baseGetter,
1360
+ substitution: substitution,
1361
+ );
1350
1362
}
1351
1363
1352
1364
@override
@@ -1355,7 +1367,10 @@ abstract class PropertyAccessorMember extends ExecutableMember
1355
1367
if (baseSetter == null ) {
1356
1368
return null ;
1357
1369
}
1358
- return PropertyAccessorMember (baseSetter, substitution);
1370
+ return PropertyAccessorMember (
1371
+ declaration: baseSetter,
1372
+ substitution: substitution,
1373
+ );
1359
1374
}
1360
1375
1361
1376
@override
@@ -1425,8 +1440,8 @@ abstract class PropertyAccessorMember extends ExecutableMember
1425
1440
}
1426
1441
1427
1442
return PropertyAccessorMember (
1428
- accessor,
1429
- Substitution .fromInterfaceType (definingType),
1443
+ declaration : accessor,
1444
+ substitution : Substitution .fromInterfaceType (definingType),
1430
1445
);
1431
1446
}
1432
1447
}
@@ -1509,10 +1524,10 @@ class SetterMember extends PropertyAccessorMember
1509
1524
1510
1525
class SuperFormalParameterMember extends ParameterMember
1511
1526
implements SuperFormalParameterElement {
1512
- factory SuperFormalParameterMember (
1513
- SuperFormalParameterElement declaration,
1514
- MapSubstitution substitution,
1515
- ) {
1527
+ factory SuperFormalParameterMember ({
1528
+ required SuperFormalParameterElement declaration,
1529
+ required MapSubstitution substitution,
1530
+ } ) {
1516
1531
var freshTypeParameters = _SubstitutedTypeParameters (
1517
1532
declaration.typeParameters,
1518
1533
substitution,
0 commit comments