[FIR] Cleanup ClassScopes reporting
The cleanup became possible after KT-62590 Review: https://jetbrains.team/p/kt/reviews/12750/timeline incompatibility.allMismatches() always returns true for mismatchedMembers => hasSingleActualSuspect always returns false => filterNot doesn't have any effect incompatibility.allMismatches() always returns false for incompatibleMembers => incompatibility.allMismatches() is redundant
This commit is contained in:
+3
-5
@@ -166,23 +166,21 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
|||||||
// This is needed only to reduce the number of errors. Incompatibility errors for those members will be reported
|
// This is needed only to reduce the number of errors. Incompatibility errors for those members will be reported
|
||||||
// later when this checker is called for them
|
// later when this checker is called for them
|
||||||
fun hasSingleActualSuspect(
|
fun hasSingleActualSuspect(
|
||||||
expectedWithIncompatibility: Pair<FirBasedSymbol<*>, Map<out ExpectActualCompatibility.MismatchOrIncompatible<FirBasedSymbol<*>>, Collection<FirBasedSymbol<*>>>>,
|
expectedWithIncompatibility: Pair<FirBasedSymbol<*>, Map<out ExpectActualCheckingCompatibility.Incompatible<FirBasedSymbol<*>>, Collection<FirBasedSymbol<*>>>>,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val (expectedMember, incompatibility) = expectedWithIncompatibility
|
val (expectedMember, incompatibility) = expectedWithIncompatibility
|
||||||
val actualMember = incompatibility.values.singleOrNull()?.singleOrNull()
|
val actualMember = incompatibility.values.singleOrNull()?.singleOrNull()
|
||||||
@OptIn(SymbolInternals::class)
|
@OptIn(SymbolInternals::class)
|
||||||
return actualMember != null &&
|
return actualMember != null &&
|
||||||
!incompatibility.allMismatches() &&
|
|
||||||
actualMember.fir.expectForActual?.values?.singleOrNull()?.singleOrNull() == expectedMember
|
actualMember.fir.expectForActual?.values?.singleOrNull()?.singleOrNull() == expectedMember
|
||||||
}
|
}
|
||||||
|
|
||||||
val nonTrivialIncompatibleMembers = checkingCompatibility.incompatibleMembers.filterNot(::hasSingleActualSuspect)
|
val nonTrivialIncompatibleMembers = checkingCompatibility.incompatibleMembers.filterNot(::hasSingleActualSuspect)
|
||||||
val nonTrivialMismatchedMembers = checkingCompatibility.mismatchedMembers.filterNot(::hasSingleActualSuspect)
|
|
||||||
|
|
||||||
if (nonTrivialIncompatibleMembers.isNotEmpty()) {
|
if (nonTrivialIncompatibleMembers.isNotEmpty()) {
|
||||||
reporter.reportOn(source, FirErrors.NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS, symbol, nonTrivialIncompatibleMembers, context)
|
reporter.reportOn(source, FirErrors.NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS, symbol, nonTrivialIncompatibleMembers, context)
|
||||||
} else if (nonTrivialMismatchedMembers.isNotEmpty()) {
|
} else if (checkingCompatibility.mismatchedMembers.isNotEmpty()) {
|
||||||
reporter.reportOn(source, FirErrors.NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS, symbol, nonTrivialMismatchedMembers, context)
|
reporter.reportOn(source, FirErrors.NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS, symbol, checkingCompatibility.mismatchedMembers, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user