[FIR] Don't remove subsumed members from intersection overrides's overriddens
This fixes a bunch of missing overridden symbols in IR. This is also required for fixing KT-59921 in the following commit where we need to keep all overridden symbols of intersection overrides so that we can enhance them properly. #KT-57300 Fixed #KT-57299 Fixed #KT-59921 #KT-57300 #KT-62788 #KT-64271 #KT-64382
This commit is contained in:
committed by
Space Team
parent
d80dee6e1c
commit
3b841dcb98
+12
-6
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.constructors
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
||||
import org.jetbrains.kotlin.fir.declarations.getNonSubsumedOverriddenSymbols
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.unwrapFakeOverridesOrDelegated
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.popLast
|
||||
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||
|
||||
sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirClassChecker(mppKind) {
|
||||
object Regular : FirJsNameClashClassMembersChecker(MppCheckerKind.Platform) {
|
||||
@@ -113,13 +115,17 @@ sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirCla
|
||||
}
|
||||
}
|
||||
|
||||
fun addAllSymbolsFrom(symbols: Collection<FirCallableSymbol<*>>) {
|
||||
fun addAllSymbolsFrom(symbols: Collection<FirCallableSymbol<*>>, sessionHolder: SessionHolder) {
|
||||
for (symbol in symbols) {
|
||||
when (symbol) {
|
||||
is FirIntersectionCallableSymbol -> {
|
||||
addAllSymbolsFrom(symbol.intersections)
|
||||
for (intersectedSymbol in symbol.intersections) {
|
||||
overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(symbol.intersections)
|
||||
val nonSubsumedOverriddenSymbols = symbol.getNonSubsumedOverriddenSymbols(
|
||||
sessionHolder.session,
|
||||
sessionHolder.scopeSession
|
||||
)
|
||||
addAllSymbolsFrom(nonSubsumedOverriddenSymbols, sessionHolder)
|
||||
for (intersectedSymbol in nonSubsumedOverriddenSymbols) {
|
||||
overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(nonSubsumedOverriddenSymbols)
|
||||
}
|
||||
}
|
||||
else -> allSymbols.add(symbol)
|
||||
@@ -137,8 +143,8 @@ sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirCla
|
||||
val scope = declaration.symbol.unsubstitutedScope(context)
|
||||
|
||||
scope.processDeclaredConstructors(allSymbols::add)
|
||||
addAllSymbolsFrom(scope.collectAllFunctions())
|
||||
addAllSymbolsFrom(scope.collectAllProperties())
|
||||
addAllSymbolsFrom(scope.collectAllFunctions(), context.sessionHolder)
|
||||
addAllSymbolsFrom(scope.collectAllProperties(), context.sessionHolder)
|
||||
|
||||
for (callableMemberSymbol in allSymbols) {
|
||||
val overriddenLeaves = scope.collectOverriddenLeaves(callableMemberSymbol)
|
||||
|
||||
Reference in New Issue
Block a user