@@ -1387,7 +1387,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1387
1387
Member interfaceMember,
1388
1388
bool isSetter,
1389
1389
callback (Member interfaceMember, bool isSetter),
1390
- {required bool isInterfaceCheck}) {
1390
+ {required bool isInterfaceCheck,
1391
+ required Member ? localMember}) {
1391
1392
if (declaredMember == interfaceMember) {
1392
1393
return ;
1393
1394
}
@@ -1402,17 +1403,20 @@ class SourceClassBuilder extends ClassBuilderImpl
1402
1403
if (declaredMember.kind == ProcedureKind .Method ||
1403
1404
declaredMember.kind == ProcedureKind .Operator ) {
1404
1405
bool seenCovariant = checkMethodOverride (types, declaredMember,
1405
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1406
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1407
+ localMember: localMember);
1406
1408
if (seenCovariant) {
1407
1409
_handleSeenCovariant (
1408
1410
memberHierarchy, interfaceMember, isSetter, callback);
1409
1411
}
1410
1412
} else if (declaredMember.kind == ProcedureKind .Getter ) {
1411
1413
checkGetterOverride (types, declaredMember, interfaceMember,
1412
- interfaceMemberOrigin, isInterfaceCheck);
1414
+ interfaceMemberOrigin, isInterfaceCheck,
1415
+ localMember: localMember);
1413
1416
} else if (declaredMember.kind == ProcedureKind .Setter ) {
1414
1417
bool seenCovariant = checkSetterOverride (types, declaredMember,
1415
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1418
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1419
+ localMember: localMember);
1416
1420
if (seenCovariant) {
1417
1421
_handleSeenCovariant (
1418
1422
memberHierarchy, interfaceMember, isSetter, callback);
@@ -1440,11 +1444,13 @@ class SourceClassBuilder extends ClassBuilderImpl
1440
1444
interfaceMember is Procedure && interfaceMember.isSetter;
1441
1445
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
1442
1446
checkGetterOverride (types, declaredMember, interfaceMember,
1443
- interfaceMemberOrigin, isInterfaceCheck);
1447
+ interfaceMemberOrigin, isInterfaceCheck,
1448
+ localMember: localMember);
1444
1449
}
1445
1450
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
1446
1451
bool seenCovariant = checkSetterOverride (types, declaredMember,
1447
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1452
+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1453
+ localMember: localMember);
1448
1454
if (seenCovariant) {
1449
1455
_handleSeenCovariant (
1450
1456
memberHierarchy, interfaceMember, isSetter, callback);
@@ -1469,7 +1475,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1469
1475
Member interfaceMemberOrigin,
1470
1476
FunctionNode ? declaredFunction,
1471
1477
FunctionNode ? interfaceFunction,
1472
- bool isInterfaceCheck) {
1478
+ bool isInterfaceCheck,
1479
+ {required Member ? localMember}) {
1473
1480
Substitution ? interfaceSubstitution;
1474
1481
if (interfaceMember.enclosingClass! .typeParameters.isNotEmpty) {
1475
1482
Class enclosingClass = interfaceMember.enclosingClass! ;
@@ -1496,7 +1503,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1496
1503
.withArguments (interfaceMemberOrigin.name.text)
1497
1504
.withLocation (_getMemberUri (interfaceMemberOrigin),
1498
1505
interfaceMemberOrigin.fileOffset, noLength)
1499
- ]);
1506
+ ],
1507
+ localMember: localMember);
1500
1508
} else if (declaredFunction? .typeParameters != null ) {
1501
1509
// Since the bound of `interfaceFunction!.parameter[i]` may have changed
1502
1510
// during substitution, it can affect the nullabilities of the types in
@@ -1570,7 +1578,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1570
1578
.withArguments (interfaceMemberOrigin.name.text)
1571
1579
.withLocation (_getMemberUri (interfaceMemberOrigin),
1572
1580
interfaceMemberOrigin.fileOffset, noLength)
1573
- ]);
1581
+ ],
1582
+ localMember: localMember);
1574
1583
}
1575
1584
}
1576
1585
}
@@ -1609,7 +1618,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1609
1618
bool isCovariantByDeclaration,
1610
1619
VariableDeclaration ? declaredParameter,
1611
1620
bool isInterfaceCheck,
1612
- {bool asIfDeclaredParameter = false }) {
1621
+ {bool asIfDeclaredParameter = false ,
1622
+ required Member ? localMember}) {
1613
1623
if (interfaceSubstitution != null ) {
1614
1624
interfaceType = interfaceSubstitution.substituteType (interfaceType);
1615
1625
}
@@ -1673,7 +1683,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1673
1683
.withArguments (interfaceMemberOrigin.name.text)
1674
1684
.withLocation (_getMemberUri (interfaceMemberOrigin),
1675
1685
interfaceMemberOrigin.fileOffset, noLength)
1676
- ]);
1686
+ ],
1687
+ localMember: localMember);
1677
1688
}
1678
1689
}
1679
1690
@@ -1690,7 +1701,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1690
1701
Procedure declaredMember,
1691
1702
Procedure interfaceMember,
1692
1703
Member interfaceMemberOrigin,
1693
- bool isInterfaceCheck) {
1704
+ bool isInterfaceCheck,
1705
+ {required Member ? localMember}) {
1694
1706
assert (declaredMember.kind == interfaceMember.kind);
1695
1707
assert (declaredMember.kind == ProcedureKind .Method ||
1696
1708
declaredMember.kind == ProcedureKind .Operator );
@@ -1707,7 +1719,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1707
1719
interfaceMemberOrigin,
1708
1720
declaredFunction,
1709
1721
interfaceFunction,
1710
- isInterfaceCheck);
1722
+ isInterfaceCheck,
1723
+ localMember: localMember);
1711
1724
1712
1725
Substitution ? declaredSubstitution =
1713
1726
_computeDeclaredSubstitution (types, declaredMember);
@@ -1723,7 +1736,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1723
1736
interfaceFunction.returnType,
1724
1737
/* isCovariantByDeclaration = */ false ,
1725
1738
/* declaredParameter = */ null ,
1726
- isInterfaceCheck);
1739
+ isInterfaceCheck,
1740
+ localMember: localMember);
1727
1741
if (declaredFunction.positionalParameters.length <
1728
1742
interfaceFunction.positionalParameters.length) {
1729
1743
reportInvalidOverride (
@@ -1741,7 +1755,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1741
1755
.withArguments (interfaceMemberOrigin.name.text)
1742
1756
.withLocation (interfaceMemberOrigin.fileUri,
1743
1757
interfaceMemberOrigin.fileOffset, noLength)
1744
- ]);
1758
+ ],
1759
+ localMember: localMember);
1745
1760
}
1746
1761
if (interfaceFunction.requiredParameterCount <
1747
1762
declaredFunction.requiredParameterCount) {
@@ -1760,7 +1775,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1760
1775
.withArguments (interfaceMemberOrigin.name.text)
1761
1776
.withLocation (interfaceMemberOrigin.fileUri,
1762
1777
interfaceMemberOrigin.fileOffset, noLength)
1763
- ]);
1778
+ ],
1779
+ localMember: localMember);
1764
1780
}
1765
1781
for (int i = 0 ;
1766
1782
i < declaredFunction.positionalParameters.length &&
@@ -1801,7 +1817,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1801
1817
declaredParameter.isCovariantByDeclaration ||
1802
1818
interfaceParameter.isCovariantByDeclaration,
1803
1819
declaredParameter,
1804
- isInterfaceCheck);
1820
+ isInterfaceCheck,
1821
+ localMember: localMember);
1805
1822
if (declaredParameter.isCovariantByDeclaration) seenCovariant = true ;
1806
1823
}
1807
1824
if (declaredFunction.namedParameters.isEmpty &&
@@ -1825,7 +1842,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1825
1842
.withArguments (interfaceMemberOrigin.name.text)
1826
1843
.withLocation (interfaceMemberOrigin.fileUri,
1827
1844
interfaceMemberOrigin.fileOffset, noLength)
1828
- ]);
1845
+ ],
1846
+ localMember: localMember);
1829
1847
}
1830
1848
1831
1849
int compareNamedParameters (VariableDeclaration p0, VariableDeclaration p1) {
@@ -1865,7 +1883,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1865
1883
.withArguments (interfaceMember.name.text)
1866
1884
.withLocation (interfaceMember.fileUri,
1867
1885
interfaceMember.fileOffset, noLength)
1868
- ]);
1886
+ ],
1887
+ localMember: localMember);
1869
1888
break outer;
1870
1889
}
1871
1890
}
@@ -1881,7 +1900,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1881
1900
interfaceNamedParameters.current.type,
1882
1901
declaredParameter.isCovariantByDeclaration,
1883
1902
declaredParameter,
1884
- isInterfaceCheck);
1903
+ isInterfaceCheck,
1904
+ localMember: localMember);
1885
1905
if (declaredParameter.isRequired &&
1886
1906
! interfaceNamedParameters.current.isRequired) {
1887
1907
// Coverage-ignore-block(suite): Not run.
@@ -1901,7 +1921,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1901
1921
.withArguments (interfaceMemberOrigin.name.text)
1902
1922
.withLocation (_getMemberUri (interfaceMemberOrigin),
1903
1923
interfaceMemberOrigin.fileOffset, noLength)
1904
- ]);
1924
+ ],
1925
+ localMember: localMember);
1905
1926
}
1906
1927
if (declaredParameter.isCovariantByDeclaration) seenCovariant = true ;
1907
1928
}
@@ -1918,7 +1939,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1918
1939
Member declaredMember,
1919
1940
Member interfaceMember,
1920
1941
Member interfaceMemberOrigin,
1921
- bool isInterfaceCheck) {
1942
+ bool isInterfaceCheck,
1943
+ {required Member ? localMember}) {
1922
1944
Substitution ? interfaceSubstitution = _computeInterfaceSubstitution (
1923
1945
types,
1924
1946
declaredMember,
@@ -1928,7 +1950,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1928
1950
null ,
1929
1951
/* interfaceFunction = */
1930
1952
null ,
1931
- isInterfaceCheck);
1953
+ isInterfaceCheck,
1954
+ localMember: localMember);
1932
1955
Substitution ? declaredSubstitution =
1933
1956
_computeDeclaredSubstitution (types, declaredMember);
1934
1957
DartType declaredType = declaredMember.getterType;
@@ -1946,7 +1969,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1946
1969
false ,
1947
1970
/* declaredParameter = */
1948
1971
null ,
1949
- isInterfaceCheck);
1972
+ isInterfaceCheck,
1973
+ localMember: localMember);
1950
1974
}
1951
1975
1952
1976
/// Checks whether [declaredMember] correctly overrides [interfaceMember] .
@@ -1962,7 +1986,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1962
1986
Member declaredMember,
1963
1987
Member interfaceMember,
1964
1988
Member interfaceMemberOrigin,
1965
- bool isInterfaceCheck) {
1989
+ bool isInterfaceCheck,
1990
+ {required Member ? localMember}) {
1966
1991
Substitution ? interfaceSubstitution = _computeInterfaceSubstitution (
1967
1992
types,
1968
1993
declaredMember,
@@ -1972,7 +1997,8 @@ class SourceClassBuilder extends ClassBuilderImpl
1972
1997
null ,
1973
1998
/* interfaceFunction = */
1974
1999
null ,
1975
- isInterfaceCheck);
2000
+ isInterfaceCheck,
2001
+ localMember: localMember);
1976
2002
Substitution ? declaredSubstitution =
1977
2003
_computeDeclaredSubstitution (types, declaredMember);
1978
2004
DartType declaredType = declaredMember.setterType;
@@ -1999,19 +2025,26 @@ class SourceClassBuilder extends ClassBuilderImpl
1999
2025
isCovariantByDeclaration,
2000
2026
declaredParameter,
2001
2027
isInterfaceCheck,
2002
- asIfDeclaredParameter: true );
2028
+ asIfDeclaredParameter: true ,
2029
+ localMember: localMember);
2003
2030
return isCovariantByDeclaration;
2004
2031
}
2005
2032
2006
2033
// When the overriding member is inherited, report the class containing
2007
2034
// the conflict as the main error.
2008
2035
void reportInvalidOverride (bool isInterfaceCheck, Member declaredMember,
2009
2036
Message message, int fileOffset, int length,
2010
- {List <LocatedMessage >? context}) {
2037
+ {List <LocatedMessage >? context, required Member ? localMember }) {
2011
2038
if (shouldOverrideProblemBeOverlooked (this )) {
2012
2039
return ;
2013
2040
}
2014
2041
2042
+ if (localMember is Procedure ) {
2043
+ localMember.isErroneous = true ;
2044
+ } else if (localMember is Field ) {
2045
+ localMember.isErroneous = true ;
2046
+ }
2047
+
2015
2048
if (declaredMember.enclosingClass == cls) {
2016
2049
// Ordinary override
2017
2050
libraryBuilder.addProblem (
0 commit comments