diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt index 21624c62525..b58ea026b4e 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt @@ -5,11 +5,7 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.PrivateForInline -import org.jetbrains.kotlin.fir.scopes.FirTypeScope -import org.jetbrains.kotlin.fir.scopes.MemberWithBaseScope -import org.jetbrains.kotlin.fir.scopes.ProcessOverriddenWithBaseScope -import org.jetbrains.kotlin.fir.scopes.ProcessorAction +import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol @@ -22,8 +18,7 @@ fun filterOutOverriddenProperties(extractedOverridden: Collection> filterOutOverridden( +fun > filterOutOverridden( extractedOverridden: Collection>, processAllOverridden: ProcessOverriddenWithBaseScope, ): Collection> { @@ -31,26 +26,25 @@ inline fun > filterOutOverridden( extractedOverridden.none { overridden2 -> overridden1 !== overridden2 && overrides( overridden2, - overridden1, - processAllOverridden - ) + overridden1.member, + ) { symbol: D, processor: (D) -> ProcessorAction -> + processAllOverriddenCallables(symbol, processor, processAllOverridden) + } } } } // Whether f overrides g -@PrivateForInline -inline fun > overrides( +private fun > overrides( f: MemberWithBaseScope, - g: MemberWithBaseScope, - processAllOverridden: ProcessOverriddenWithBaseScope, + gMember: D, + processAllOverridden: ProcessAllOverridden, ): Boolean { val (fMember, fScope) = f - val (gMember) = g var result = false - fScope.processAllOverridden(fMember) { overridden, _ -> + fScope.processAllOverridden(fMember) { overridden -> if (overridden == gMember) { result = true ProcessorAction.STOP diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt index 26c71580e49..afe83358046 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt @@ -78,6 +78,7 @@ class MemberWithBaseScope>(val member: D, val baseS } typealias ProcessOverriddenWithBaseScope = FirTypeScope.(D, (D, FirTypeScope) -> ProcessorAction) -> ProcessorAction +typealias ProcessAllOverridden = FirTypeScope.(D, (D) -> ProcessorAction) -> ProcessorAction fun FirTypeScope.processOverriddenFunctions( functionSymbol: FirNamedFunctionSymbol, @@ -159,6 +160,13 @@ private fun > FirTypeScope.doProcessAllOverriddenCallab } } +fun > FirTypeScope.processAllOverriddenCallables( + callableSymbol: S, + processor: (S) -> ProcessorAction, + processDirectOverriddenCallablesWithBaseScope: ProcessOverriddenWithBaseScope, +): ProcessorAction = + doProcessAllOverriddenCallables(callableSymbol, processor, processDirectOverriddenCallablesWithBaseScope, mutableSetOf()) + private fun > FirTypeScope.doProcessAllOverriddenCallables( callableSymbol: S, processor: (S) -> ProcessorAction,