@@ -1387,7 +1387,8 @@ class SourceClassBuilder extends ClassBuilderImpl
13871387 Member interfaceMember,
13881388 bool isSetter,
13891389 callback (Member interfaceMember, bool isSetter),
1390- {required bool isInterfaceCheck}) {
1390+ {required bool isInterfaceCheck,
1391+ required Member ? localMember}) {
13911392 if (declaredMember == interfaceMember) {
13921393 return ;
13931394 }
@@ -1402,17 +1403,20 @@ class SourceClassBuilder extends ClassBuilderImpl
14021403 if (declaredMember.kind == ProcedureKind .Method ||
14031404 declaredMember.kind == ProcedureKind .Operator ) {
14041405 bool seenCovariant = checkMethodOverride (types, declaredMember,
1405- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1406+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1407+ localMember: localMember);
14061408 if (seenCovariant) {
14071409 _handleSeenCovariant (
14081410 memberHierarchy, interfaceMember, isSetter, callback);
14091411 }
14101412 } else if (declaredMember.kind == ProcedureKind .Getter ) {
14111413 checkGetterOverride (types, declaredMember, interfaceMember,
1412- interfaceMemberOrigin, isInterfaceCheck);
1414+ interfaceMemberOrigin, isInterfaceCheck,
1415+ localMember: localMember);
14131416 } else if (declaredMember.kind == ProcedureKind .Setter ) {
14141417 bool seenCovariant = checkSetterOverride (types, declaredMember,
1415- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1418+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1419+ localMember: localMember);
14161420 if (seenCovariant) {
14171421 _handleSeenCovariant (
14181422 memberHierarchy, interfaceMember, isSetter, callback);
@@ -1440,11 +1444,13 @@ class SourceClassBuilder extends ClassBuilderImpl
14401444 interfaceMember is Procedure && interfaceMember.isSetter;
14411445 if (declaredMemberHasGetter && interfaceMemberHasGetter) {
14421446 checkGetterOverride (types, declaredMember, interfaceMember,
1443- interfaceMemberOrigin, isInterfaceCheck);
1447+ interfaceMemberOrigin, isInterfaceCheck,
1448+ localMember: localMember);
14441449 }
14451450 if (declaredMemberHasSetter && interfaceMemberHasSetter) {
14461451 bool seenCovariant = checkSetterOverride (types, declaredMember,
1447- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
1452+ interfaceMember, interfaceMemberOrigin, isInterfaceCheck,
1453+ localMember: localMember);
14481454 if (seenCovariant) {
14491455 _handleSeenCovariant (
14501456 memberHierarchy, interfaceMember, isSetter, callback);
@@ -1469,7 +1475,8 @@ class SourceClassBuilder extends ClassBuilderImpl
14691475 Member interfaceMemberOrigin,
14701476 FunctionNode ? declaredFunction,
14711477 FunctionNode ? interfaceFunction,
1472- bool isInterfaceCheck) {
1478+ bool isInterfaceCheck,
1479+ {required Member ? localMember}) {
14731480 Substitution ? interfaceSubstitution;
14741481 if (interfaceMember.enclosingClass! .typeParameters.isNotEmpty) {
14751482 Class enclosingClass = interfaceMember.enclosingClass! ;
@@ -1496,7 +1503,8 @@ class SourceClassBuilder extends ClassBuilderImpl
14961503 .withArguments (interfaceMemberOrigin.name.text)
14971504 .withLocation (_getMemberUri (interfaceMemberOrigin),
14981505 interfaceMemberOrigin.fileOffset, noLength)
1499- ]);
1506+ ],
1507+ localMember: localMember);
15001508 } else if (declaredFunction? .typeParameters != null ) {
15011509 // Since the bound of `interfaceFunction!.parameter[i]` may have changed
15021510 // during substitution, it can affect the nullabilities of the types in
@@ -1570,7 +1578,8 @@ class SourceClassBuilder extends ClassBuilderImpl
15701578 .withArguments (interfaceMemberOrigin.name.text)
15711579 .withLocation (_getMemberUri (interfaceMemberOrigin),
15721580 interfaceMemberOrigin.fileOffset, noLength)
1573- ]);
1581+ ],
1582+ localMember: localMember);
15741583 }
15751584 }
15761585 }
@@ -1609,7 +1618,8 @@ class SourceClassBuilder extends ClassBuilderImpl
16091618 bool isCovariantByDeclaration,
16101619 VariableDeclaration ? declaredParameter,
16111620 bool isInterfaceCheck,
1612- {bool asIfDeclaredParameter = false }) {
1621+ {bool asIfDeclaredParameter = false ,
1622+ required Member ? localMember}) {
16131623 if (interfaceSubstitution != null ) {
16141624 interfaceType = interfaceSubstitution.substituteType (interfaceType);
16151625 }
@@ -1673,7 +1683,8 @@ class SourceClassBuilder extends ClassBuilderImpl
16731683 .withArguments (interfaceMemberOrigin.name.text)
16741684 .withLocation (_getMemberUri (interfaceMemberOrigin),
16751685 interfaceMemberOrigin.fileOffset, noLength)
1676- ]);
1686+ ],
1687+ localMember: localMember);
16771688 }
16781689 }
16791690
@@ -1690,7 +1701,8 @@ class SourceClassBuilder extends ClassBuilderImpl
16901701 Procedure declaredMember,
16911702 Procedure interfaceMember,
16921703 Member interfaceMemberOrigin,
1693- bool isInterfaceCheck) {
1704+ bool isInterfaceCheck,
1705+ {required Member ? localMember}) {
16941706 assert (declaredMember.kind == interfaceMember.kind);
16951707 assert (declaredMember.kind == ProcedureKind .Method ||
16961708 declaredMember.kind == ProcedureKind .Operator );
@@ -1707,7 +1719,8 @@ class SourceClassBuilder extends ClassBuilderImpl
17071719 interfaceMemberOrigin,
17081720 declaredFunction,
17091721 interfaceFunction,
1710- isInterfaceCheck);
1722+ isInterfaceCheck,
1723+ localMember: localMember);
17111724
17121725 Substitution ? declaredSubstitution =
17131726 _computeDeclaredSubstitution (types, declaredMember);
@@ -1723,7 +1736,8 @@ class SourceClassBuilder extends ClassBuilderImpl
17231736 interfaceFunction.returnType,
17241737 /* isCovariantByDeclaration = */ false ,
17251738 /* declaredParameter = */ null ,
1726- isInterfaceCheck);
1739+ isInterfaceCheck,
1740+ localMember: localMember);
17271741 if (declaredFunction.positionalParameters.length <
17281742 interfaceFunction.positionalParameters.length) {
17291743 reportInvalidOverride (
@@ -1741,7 +1755,8 @@ class SourceClassBuilder extends ClassBuilderImpl
17411755 .withArguments (interfaceMemberOrigin.name.text)
17421756 .withLocation (interfaceMemberOrigin.fileUri,
17431757 interfaceMemberOrigin.fileOffset, noLength)
1744- ]);
1758+ ],
1759+ localMember: localMember);
17451760 }
17461761 if (interfaceFunction.requiredParameterCount <
17471762 declaredFunction.requiredParameterCount) {
@@ -1760,7 +1775,8 @@ class SourceClassBuilder extends ClassBuilderImpl
17601775 .withArguments (interfaceMemberOrigin.name.text)
17611776 .withLocation (interfaceMemberOrigin.fileUri,
17621777 interfaceMemberOrigin.fileOffset, noLength)
1763- ]);
1778+ ],
1779+ localMember: localMember);
17641780 }
17651781 for (int i = 0 ;
17661782 i < declaredFunction.positionalParameters.length &&
@@ -1801,7 +1817,8 @@ class SourceClassBuilder extends ClassBuilderImpl
18011817 declaredParameter.isCovariantByDeclaration ||
18021818 interfaceParameter.isCovariantByDeclaration,
18031819 declaredParameter,
1804- isInterfaceCheck);
1820+ isInterfaceCheck,
1821+ localMember: localMember);
18051822 if (declaredParameter.isCovariantByDeclaration) seenCovariant = true ;
18061823 }
18071824 if (declaredFunction.namedParameters.isEmpty &&
@@ -1825,7 +1842,8 @@ class SourceClassBuilder extends ClassBuilderImpl
18251842 .withArguments (interfaceMemberOrigin.name.text)
18261843 .withLocation (interfaceMemberOrigin.fileUri,
18271844 interfaceMemberOrigin.fileOffset, noLength)
1828- ]);
1845+ ],
1846+ localMember: localMember);
18291847 }
18301848
18311849 int compareNamedParameters (VariableDeclaration p0, VariableDeclaration p1) {
@@ -1865,7 +1883,8 @@ class SourceClassBuilder extends ClassBuilderImpl
18651883 .withArguments (interfaceMember.name.text)
18661884 .withLocation (interfaceMember.fileUri,
18671885 interfaceMember.fileOffset, noLength)
1868- ]);
1886+ ],
1887+ localMember: localMember);
18691888 break outer;
18701889 }
18711890 }
@@ -1881,7 +1900,8 @@ class SourceClassBuilder extends ClassBuilderImpl
18811900 interfaceNamedParameters.current.type,
18821901 declaredParameter.isCovariantByDeclaration,
18831902 declaredParameter,
1884- isInterfaceCheck);
1903+ isInterfaceCheck,
1904+ localMember: localMember);
18851905 if (declaredParameter.isRequired &&
18861906 ! interfaceNamedParameters.current.isRequired) {
18871907 // Coverage-ignore-block(suite): Not run.
@@ -1901,7 +1921,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19011921 .withArguments (interfaceMemberOrigin.name.text)
19021922 .withLocation (_getMemberUri (interfaceMemberOrigin),
19031923 interfaceMemberOrigin.fileOffset, noLength)
1904- ]);
1924+ ],
1925+ localMember: localMember);
19051926 }
19061927 if (declaredParameter.isCovariantByDeclaration) seenCovariant = true ;
19071928 }
@@ -1918,7 +1939,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19181939 Member declaredMember,
19191940 Member interfaceMember,
19201941 Member interfaceMemberOrigin,
1921- bool isInterfaceCheck) {
1942+ bool isInterfaceCheck,
1943+ {required Member ? localMember}) {
19221944 Substitution ? interfaceSubstitution = _computeInterfaceSubstitution (
19231945 types,
19241946 declaredMember,
@@ -1928,7 +1950,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19281950 null ,
19291951 /* interfaceFunction = */
19301952 null ,
1931- isInterfaceCheck);
1953+ isInterfaceCheck,
1954+ localMember: localMember);
19321955 Substitution ? declaredSubstitution =
19331956 _computeDeclaredSubstitution (types, declaredMember);
19341957 DartType declaredType = declaredMember.getterType;
@@ -1946,7 +1969,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19461969 false ,
19471970 /* declaredParameter = */
19481971 null ,
1949- isInterfaceCheck);
1972+ isInterfaceCheck,
1973+ localMember: localMember);
19501974 }
19511975
19521976 /// Checks whether [declaredMember] correctly overrides [interfaceMember] .
@@ -1962,7 +1986,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19621986 Member declaredMember,
19631987 Member interfaceMember,
19641988 Member interfaceMemberOrigin,
1965- bool isInterfaceCheck) {
1989+ bool isInterfaceCheck,
1990+ {required Member ? localMember}) {
19661991 Substitution ? interfaceSubstitution = _computeInterfaceSubstitution (
19671992 types,
19681993 declaredMember,
@@ -1972,7 +1997,8 @@ class SourceClassBuilder extends ClassBuilderImpl
19721997 null ,
19731998 /* interfaceFunction = */
19741999 null ,
1975- isInterfaceCheck);
2000+ isInterfaceCheck,
2001+ localMember: localMember);
19762002 Substitution ? declaredSubstitution =
19772003 _computeDeclaredSubstitution (types, declaredMember);
19782004 DartType declaredType = declaredMember.setterType;
@@ -1999,19 +2025,26 @@ class SourceClassBuilder extends ClassBuilderImpl
19992025 isCovariantByDeclaration,
20002026 declaredParameter,
20012027 isInterfaceCheck,
2002- asIfDeclaredParameter: true );
2028+ asIfDeclaredParameter: true ,
2029+ localMember: localMember);
20032030 return isCovariantByDeclaration;
20042031 }
20052032
20062033 // When the overriding member is inherited, report the class containing
20072034 // the conflict as the main error.
20082035 void reportInvalidOverride (bool isInterfaceCheck, Member declaredMember,
20092036 Message message, int fileOffset, int length,
2010- {List <LocatedMessage >? context}) {
2037+ {List <LocatedMessage >? context, required Member ? localMember }) {
20112038 if (shouldOverrideProblemBeOverlooked (this )) {
20122039 return ;
20132040 }
20142041
2042+ if (localMember is Procedure ) {
2043+ localMember.isErroneous = true ;
2044+ } else if (localMember is Field ) {
2045+ localMember.isErroneous = true ;
2046+ }
2047+
20152048 if (declaredMember.enclosingClass == cls) {
20162049 // Ordinary override
20172050 libraryBuilder.addProblem (
0 commit comments