K2: filter invisible overridden in status resolver & FIR2IR

Related to KT-53197
This commit is contained in:
Mikhail Glukhikh
2022-09-19 17:53:29 +02:00
committed by Space
parent 3a5d75fd22
commit bcd7a531b9
9 changed files with 57 additions and 136 deletions
@@ -120,17 +120,24 @@ abstract class FirVisibilityChecker : FirSessionComponent {
session: FirSession,
candidateInDerivedClass: FirMemberDeclaration,
candidateInBaseClass: FirMemberDeclaration
): Boolean = isVisibleForOverriding(session, candidateInDerivedClass.moduleData, candidateInDerivedClass.symbol, candidateInBaseClass)
fun isVisibleForOverriding(
session: FirSession,
derivedClassModuleData: FirModuleData,
symbolFromDerivedClass: FirBasedSymbol<*>,
candidateInBaseClass: FirMemberDeclaration,
): Boolean = when (candidateInBaseClass.visibility) {
Visibilities.Internal -> {
candidateInBaseClass.moduleData == candidateInDerivedClass.moduleData ||
(candidateInDerivedClass.moduleData == session.moduleData &&
candidateInBaseClass.moduleData == derivedClassModuleData ||
(derivedClassModuleData == session.moduleData &&
session.moduleVisibilityChecker?.isInFriendModule(candidateInBaseClass) == true)
}
Visibilities.Private, Visibilities.PrivateToThis -> false
Visibilities.Protected -> true
else -> platformOverrideVisibilityCheck(
session, candidateInDerivedClass.symbol, candidateInBaseClass.symbol, candidateInBaseClass.visibility
session, symbolFromDerivedClass, candidateInBaseClass.symbol, candidateInBaseClass.visibility
)
}