K2: repeat K1 behavior around multiple inheritance by delegation

#KT-56720 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-03-03 10:13:11 +01:00
committed by Space Team
parent ab883d91c8
commit 45e78455b2
10 changed files with 127 additions and 22 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.utils.*
import org.jetbrains.kotlin.fir.delegatedWrapperData
@@ -71,7 +72,12 @@ object FirNotImplementedOverrideChecker : FirClassChecker() {
val delegatedTo = delegatedWrapperData.wrapped.unwrapFakeOverrides().symbol
if (symbol.multipleDelegatesWithTheSameSignature == true) {
manyImplementationsDelegationSymbols.add(symbol)
if (directOverriddenMembersWithBaseScope.isNotEmpty() &&
// We should report here if either 2+ members or single member with non-enhancement origin
directOverriddenMembersWithBaseScope.singleOrNull()?.member?.origin != FirDeclarationOrigin.Enhancement
) {
manyImplementationsDelegationSymbols.add(symbol)
}
}
val firstFinal = filteredOverriddenMembers.firstOrNull { it.isFinal }