@@ -1142,6 +1142,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1142
1142
if (declaredMember == interfaceMember) {
1143
1143
return ;
1144
1144
}
1145
+ Member interfaceMemberOrigin =
1146
+ interfaceMember.memberSignatureOrigin ?? interfaceMember;
1145
1147
if (declaredMember is Constructor || interfaceMember is Constructor ) {
1146
1148
unimplemented (
1147
1149
"Constructor in override check." , declaredMember.fileOffset, fileUri);
@@ -1150,18 +1152,18 @@ class SourceClassBuilder extends ClassBuilderImpl
1150
1152
if (declaredMember.kind == interfaceMember.kind) {
1151
1153
if (declaredMember.kind == ProcedureKind .Method ||
1152
1154
declaredMember.kind == ProcedureKind .Operator ) {
1153
- bool seenCovariant = checkMethodOverride (
1154
- types, declaredMember, interfaceMember , isInterfaceCheck);
1155
+ bool seenCovariant = checkMethodOverride (types, declaredMember,
1156
+ interfaceMember, interfaceMemberOrigin , isInterfaceCheck);
1155
1157
if (seenCovariant) {
1156
1158
handleSeenCovariant (
1157
1159
types, declaredMember, interfaceMember, isSetter, callback);
1158
1160
}
1159
1161
} else if (declaredMember.kind == ProcedureKind .Getter ) {
1160
- checkGetterOverride (
1161
- types, declaredMember, interfaceMember , isInterfaceCheck);
1162
+ checkGetterOverride (types, declaredMember, interfaceMember,
1163
+ interfaceMemberOrigin , isInterfaceCheck);
1162
1164
} else if (declaredMember.kind == ProcedureKind .Setter ) {
1163
- bool seenCovariant = checkSetterOverride (
1164
- types, declaredMember, interfaceMember , isInterfaceCheck);
1165
+ bool seenCovariant = checkSetterOverride (types, declaredMember,
1166
+ interfaceMember, interfaceMemberOrigin , isInterfaceCheck);
1165
1167
if (seenCovariant) {
1166
1168
handleSeenCovariant (
1167
1169
types, declaredMember, interfaceMember, isSetter, callback);
@@ -1187,12 +1189,12 @@ class SourceClassBuilder extends ClassBuilderImpl
1187
1189
! interfaceMember.isConst) ||
1188
1190
interfaceMember is Procedure && interfaceMember.isSetter;
1189
1191
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
1190
- checkGetterOverride (
1191
- types, declaredMember, interfaceMember , isInterfaceCheck);
1192
+ checkGetterOverride (types, declaredMember, interfaceMember,
1193
+ interfaceMemberOrigin , isInterfaceCheck);
1192
1194
}
1193
1195
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
1194
- bool seenCovariant = checkSetterOverride (
1195
- types, declaredMember, interfaceMember , isInterfaceCheck);
1196
+ bool seenCovariant = checkSetterOverride (types, declaredMember,
1197
+ interfaceMember, interfaceMemberOrigin , isInterfaceCheck);
1196
1198
if (seenCovariant) {
1197
1199
handleSeenCovariant (
1198
1200
types, declaredMember, interfaceMember, isSetter, callback);
@@ -1214,6 +1216,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1214
1216
Types types,
1215
1217
Member declaredMember,
1216
1218
Member interfaceMember,
1219
+ Member interfaceMemberOrigin,
1217
1220
FunctionNode declaredFunction,
1218
1221
FunctionNode interfaceFunction,
1219
1222
bool isInterfaceCheck) {
@@ -1234,15 +1237,15 @@ class SourceClassBuilder extends ClassBuilderImpl
1234
1237
templateOverrideTypeVariablesMismatch.withArguments (
1235
1238
"${declaredMember .enclosingClass .name }."
1236
1239
"${declaredMember .name .name }" ,
1237
- "${interfaceMember .enclosingClass .name }."
1238
- "${interfaceMember .name .name }" ),
1240
+ "${interfaceMemberOrigin .enclosingClass .name }."
1241
+ "${interfaceMemberOrigin .name .name }" ),
1239
1242
declaredMember.fileOffset,
1240
1243
noLength,
1241
1244
context: [
1242
1245
templateOverriddenMethodCause
1243
- .withArguments (interfaceMember .name.name)
1244
- .withLocation (_getMemberUri (interfaceMember ),
1245
- interfaceMember .fileOffset, noLength)
1246
+ .withArguments (interfaceMemberOrigin .name.name)
1247
+ .withLocation (_getMemberUri (interfaceMemberOrigin ),
1248
+ interfaceMemberOrigin .fileOffset, noLength)
1246
1249
]);
1247
1250
} else if (declaredFunction? .typeParameters != null ) {
1248
1251
Map <TypeParameter , DartType > substitutionMap =
@@ -1283,16 +1286,16 @@ class SourceClassBuilder extends ClassBuilderImpl
1283
1286
"${declaredMember .enclosingClass .name }."
1284
1287
"${declaredMember .name .name }" ,
1285
1288
computedBound,
1286
- "${interfaceMember .enclosingClass .name }."
1287
- "${interfaceMember .name .name }" ,
1289
+ "${interfaceMemberOrigin .enclosingClass .name }."
1290
+ "${interfaceMemberOrigin .name .name }" ,
1288
1291
library.isNonNullableByDefault),
1289
1292
declaredMember.fileOffset,
1290
1293
noLength,
1291
1294
context: [
1292
1295
templateOverriddenMethodCause
1293
- .withArguments (interfaceMember .name.name)
1294
- .withLocation (_getMemberUri (interfaceMember ),
1295
- interfaceMember .fileOffset, noLength)
1296
+ .withArguments (interfaceMemberOrigin .name.name)
1297
+ .withLocation (_getMemberUri (interfaceMemberOrigin ),
1298
+ interfaceMemberOrigin .fileOffset, noLength)
1296
1299
]);
1297
1300
}
1298
1301
}
@@ -1322,6 +1325,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1322
1325
Substitution declaredSubstitution,
1323
1326
Member declaredMember,
1324
1327
Member interfaceMember,
1328
+ Member interfaceMemberOrigin,
1325
1329
DartType declaredType,
1326
1330
DartType interfaceType,
1327
1331
bool isCovariant,
@@ -1365,8 +1369,9 @@ class SourceClassBuilder extends ClassBuilderImpl
1365
1369
if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
1366
1370
String declaredMemberName = '${declaredMember .enclosingClass .name }'
1367
1371
'.${declaredMember .name .name }' ;
1368
- String interfaceMemberName = '${interfaceMember .enclosingClass .name }'
1369
- '.${interfaceMember .name .name }' ;
1372
+ String interfaceMemberName =
1373
+ '${interfaceMemberOrigin .enclosingClass .name }'
1374
+ '.${interfaceMemberOrigin .name .name }' ;
1370
1375
Message message;
1371
1376
int fileOffset;
1372
1377
if (declaredParameter == null ) {
@@ -1401,18 +1406,28 @@ class SourceClassBuilder extends ClassBuilderImpl
1401
1406
isInterfaceCheck, declaredMember, message, fileOffset, noLength,
1402
1407
context: [
1403
1408
templateOverriddenMethodCause
1404
- .withArguments (interfaceMember .name.name)
1405
- .withLocation (_getMemberUri (interfaceMember ),
1406
- interfaceMember .fileOffset, noLength)
1409
+ .withArguments (interfaceMemberOrigin .name.name)
1410
+ .withLocation (_getMemberUri (interfaceMemberOrigin ),
1411
+ interfaceMemberOrigin .fileOffset, noLength)
1407
1412
]);
1408
1413
}
1409
1414
}
1410
1415
}
1411
1416
1417
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember] .
1418
+ ///
1419
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
1420
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
1421
+ /// itself be synthesized.
1422
+ ///
1412
1423
/// Returns whether a covariant parameter was seen and more methods thus have
1413
1424
/// to be checked.
1414
- bool checkMethodOverride (Types types, Procedure declaredMember,
1415
- Procedure interfaceMember, bool isInterfaceCheck) {
1425
+ bool checkMethodOverride (
1426
+ Types types,
1427
+ Procedure declaredMember,
1428
+ Procedure interfaceMember,
1429
+ Member interfaceMemberOrigin,
1430
+ bool isInterfaceCheck) {
1416
1431
assert (declaredMember.kind == interfaceMember.kind);
1417
1432
assert (declaredMember.kind == ProcedureKind .Method ||
1418
1433
declaredMember.kind == ProcedureKind .Operator );
@@ -1424,6 +1439,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1424
1439
types,
1425
1440
declaredMember,
1426
1441
interfaceMember,
1442
+ interfaceMemberOrigin,
1427
1443
declaredFunction,
1428
1444
interfaceFunction,
1429
1445
isInterfaceCheck);
@@ -1437,6 +1453,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1437
1453
declaredSubstitution,
1438
1454
declaredMember,
1439
1455
interfaceMember,
1456
+ interfaceMemberOrigin,
1440
1457
declaredFunction.returnType,
1441
1458
interfaceFunction.returnType,
1442
1459
false ,
@@ -1505,6 +1522,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1505
1522
declaredSubstitution,
1506
1523
declaredMember,
1507
1524
interfaceMember,
1525
+ interfaceMemberOrigin,
1508
1526
declaredParameter.type,
1509
1527
interfaceParameter.type,
1510
1528
declaredParameter.isCovariant || interfaceParameter.isCovariant,
@@ -1524,15 +1542,15 @@ class SourceClassBuilder extends ClassBuilderImpl
1524
1542
templateOverrideFewerNamedArguments.withArguments (
1525
1543
"${declaredMember .enclosingClass .name }."
1526
1544
"${declaredMember .name .name }" ,
1527
- "${interfaceMember .enclosingClass .name }."
1528
- "${interfaceMember .name .name }" ),
1545
+ "${interfaceMemberOrigin .enclosingClass .name }."
1546
+ "${interfaceMemberOrigin .name .name }" ),
1529
1547
declaredMember.fileOffset,
1530
1548
noLength,
1531
1549
context: [
1532
1550
templateOverriddenMethodCause
1533
- .withArguments (interfaceMember .name.name)
1534
- .withLocation (interfaceMember .fileUri,
1535
- interfaceMember .fileOffset, noLength)
1551
+ .withArguments (interfaceMemberOrigin .name.name)
1552
+ .withLocation (interfaceMemberOrigin .fileUri,
1553
+ interfaceMemberOrigin .fileOffset, noLength)
1536
1554
]);
1537
1555
}
1538
1556
int compareNamedParameters (VariableDeclaration p0, VariableDeclaration p1) {
@@ -1582,6 +1600,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1582
1600
declaredSubstitution,
1583
1601
declaredMember,
1584
1602
interfaceMember,
1603
+ interfaceMemberOrigin,
1585
1604
declaredParameter.type,
1586
1605
interfaceNamedParameters.current.type,
1587
1606
declaredParameter.isCovariant,
@@ -1604,20 +1623,35 @@ class SourceClassBuilder extends ClassBuilderImpl
1604
1623
noLength,
1605
1624
context: [
1606
1625
templateOverriddenMethodCause
1607
- .withArguments (interfaceMember .name.name)
1608
- .withLocation (_getMemberUri (interfaceMember ),
1609
- interfaceMember .fileOffset, noLength)
1626
+ .withArguments (interfaceMemberOrigin .name.name)
1627
+ .withLocation (_getMemberUri (interfaceMemberOrigin ),
1628
+ interfaceMemberOrigin .fileOffset, noLength)
1610
1629
]);
1611
1630
}
1612
1631
if (declaredParameter.isCovariant) seenCovariant = true ;
1613
1632
}
1614
1633
return seenCovariant;
1615
1634
}
1616
1635
1617
- void checkGetterOverride (Types types, Member declaredMember,
1618
- Member interfaceMember, bool isInterfaceCheck) {
1636
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember] .
1637
+ ///
1638
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
1639
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
1640
+ /// itself be synthesized.
1641
+ void checkGetterOverride (
1642
+ Types types,
1643
+ Member declaredMember,
1644
+ Member interfaceMember,
1645
+ Member interfaceMemberOrigin,
1646
+ bool isInterfaceCheck) {
1619
1647
Substitution interfaceSubstitution = _computeInterfaceSubstitution (
1620
- types, declaredMember, interfaceMember, null , null , isInterfaceCheck);
1648
+ types,
1649
+ declaredMember,
1650
+ interfaceMember,
1651
+ interfaceMemberOrigin,
1652
+ /* declaredFunction = */ null ,
1653
+ /* interfaceFunction = */ null ,
1654
+ isInterfaceCheck);
1621
1655
Substitution declaredSubstitution =
1622
1656
_computeDeclaredSubstitution (types, declaredMember);
1623
1657
DartType declaredType = declaredMember.getterType;
@@ -1628,19 +1662,36 @@ class SourceClassBuilder extends ClassBuilderImpl
1628
1662
declaredSubstitution,
1629
1663
declaredMember,
1630
1664
interfaceMember,
1665
+ interfaceMemberOrigin,
1631
1666
declaredType,
1632
1667
interfaceType,
1633
- false ,
1634
- null ,
1668
+ /* isCovariant = */ false ,
1669
+ /* declaredParameter = */ null ,
1635
1670
isInterfaceCheck);
1636
1671
}
1637
1672
1673
+ /// Checks whether [declaredMember] correctly overrides [interfaceMember] .
1674
+ ///
1675
+ /// If an error is reporter [interfaceMemberOrigin] is used as the context
1676
+ /// for where [interfaceMember] was declared, since [interfaceMember] might
1677
+ /// itself be synthesized.
1678
+ ///
1638
1679
/// Returns whether a covariant parameter was seen and more methods thus have
1639
1680
/// to be checked.
1640
- bool checkSetterOverride (Types types, Member declaredMember,
1641
- Member interfaceMember, bool isInterfaceCheck) {
1681
+ bool checkSetterOverride (
1682
+ Types types,
1683
+ Member declaredMember,
1684
+ Member interfaceMember,
1685
+ Member interfaceMemberOrigin,
1686
+ bool isInterfaceCheck) {
1642
1687
Substitution interfaceSubstitution = _computeInterfaceSubstitution (
1643
- types, declaredMember, interfaceMember, null , null , isInterfaceCheck);
1688
+ types,
1689
+ declaredMember,
1690
+ interfaceMember,
1691
+ interfaceMemberOrigin,
1692
+ /* declaredFunction = */ null ,
1693
+ /* interfaceFunction = */ null ,
1694
+ isInterfaceCheck);
1644
1695
Substitution declaredSubstitution =
1645
1696
_computeDeclaredSubstitution (types, declaredMember);
1646
1697
DartType declaredType = declaredMember.setterType;
@@ -1660,6 +1711,7 @@ class SourceClassBuilder extends ClassBuilderImpl
1660
1711
declaredSubstitution,
1661
1712
declaredMember,
1662
1713
interfaceMember,
1714
+ interfaceMemberOrigin,
1663
1715
declaredType,
1664
1716
interfaceType,
1665
1717
isCovariant,
0 commit comments