Skip to content

Commit efdecc6

Browse files
dzharkovSpace Team
authored and
Space Team
committed
K2: Make filterOutOverridden helper satisfying its contracts
It's obviously expected that all overridden, not only direct ones are considered While it likely changes the behavior and some tests are expected to be changed, original intention was to fix the behavior for other usages (see later commits) and the part with tests are postponed with KT-58636 ^KT-58636 Related
1 parent 85059ce commit efdecc6

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirOverrideUtils.kt

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55

66
package org.jetbrains.kotlin.fir.scopes.impl
77

8-
import org.jetbrains.kotlin.fir.PrivateForInline
9-
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
10-
import org.jetbrains.kotlin.fir.scopes.MemberWithBaseScope
11-
import org.jetbrains.kotlin.fir.scopes.ProcessOverriddenWithBaseScope
12-
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
8+
import org.jetbrains.kotlin.fir.scopes.*
139
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
1410
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
1511
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -22,35 +18,33 @@ fun filterOutOverriddenProperties(extractedOverridden: Collection<MemberWithBase
2218
return filterOutOverridden(extractedOverridden, FirTypeScope::processDirectOverriddenPropertiesWithBaseScope)
2319
}
2420

25-
@OptIn(PrivateForInline::class)
26-
inline fun <D : FirCallableSymbol<*>> filterOutOverridden(
21+
fun <D : FirCallableSymbol<*>> filterOutOverridden(
2722
extractedOverridden: Collection<MemberWithBaseScope<D>>,
2823
processAllOverridden: ProcessOverriddenWithBaseScope<D>,
2924
): Collection<MemberWithBaseScope<D>> {
3025
return extractedOverridden.filter { overridden1 ->
3126
extractedOverridden.none { overridden2 ->
3227
overridden1 !== overridden2 && overrides(
3328
overridden2,
34-
overridden1,
35-
processAllOverridden
36-
)
29+
overridden1.member,
30+
) { symbol: D, processor: (D) -> ProcessorAction ->
31+
processAllOverriddenCallables(symbol, processor, processAllOverridden)
32+
}
3733
}
3834
}
3935
}
4036

4137
// Whether f overrides g
42-
@PrivateForInline
43-
inline fun <D : FirCallableSymbol<*>> overrides(
38+
private fun <D : FirCallableSymbol<*>> overrides(
4439
f: MemberWithBaseScope<D>,
45-
g: MemberWithBaseScope<D>,
46-
processAllOverridden: ProcessOverriddenWithBaseScope<D>,
40+
gMember: D,
41+
processAllOverridden: ProcessAllOverridden<D>,
4742
): Boolean {
4843
val (fMember, fScope) = f
49-
val (gMember) = g
5044

5145
var result = false
5246

53-
fScope.processAllOverridden(fMember) { overridden, _ ->
47+
fScope.processAllOverridden(fMember) { overridden ->
5448
if (overridden == gMember) {
5549
result = true
5650
ProcessorAction.STOP

compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class MemberWithBaseScope<out D : FirCallableSymbol<*>>(val member: D, val baseS
7878
}
7979

8080
typealias ProcessOverriddenWithBaseScope<D> = FirTypeScope.(D, (D, FirTypeScope) -> ProcessorAction) -> ProcessorAction
81+
typealias ProcessAllOverridden<D> = FirTypeScope.(D, (D) -> ProcessorAction) -> ProcessorAction
8182

8283
fun FirTypeScope.processOverriddenFunctions(
8384
functionSymbol: FirNamedFunctionSymbol,
@@ -159,6 +160,13 @@ private fun <S : FirCallableSymbol<*>> FirTypeScope.doProcessAllOverriddenCallab
159160
}
160161
}
161162

163+
fun <S : FirCallableSymbol<*>> FirTypeScope.processAllOverriddenCallables(
164+
callableSymbol: S,
165+
processor: (S) -> ProcessorAction,
166+
processDirectOverriddenCallablesWithBaseScope: ProcessOverriddenWithBaseScope<S>,
167+
): ProcessorAction =
168+
doProcessAllOverriddenCallables(callableSymbol, processor, processDirectOverriddenCallablesWithBaseScope, mutableSetOf())
169+
162170
private fun <S : FirCallableSymbol<*>> FirTypeScope.doProcessAllOverriddenCallables(
163171
callableSymbol: S,
164172
processor: (S) -> ProcessorAction,

0 commit comments

Comments
 (0)