FIR visibility checker: remove redundant session from isVisibleForOverriding

This commit is contained in:
Mikhail Glukhikh
2022-09-28 17:59:43 +02:00
committed by Space
parent de43877161
commit f68f06a93f
5 changed files with 9 additions and 17 deletions
@@ -371,7 +371,7 @@ internal fun FirSimpleFunction.processOverriddenFunctionSymbols(
scope.processFunctionsByName(name) {}
scope.processOverriddenFunctionsFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
)
) {
return@processOverriddenFunctionsFromSuperClasses ProcessorAction.NEXT
@@ -446,7 +446,7 @@ internal fun FirProperty.processOverriddenPropertySymbols(
val overriddenSet = mutableSetOf<IrPropertySymbol>()
scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
)
) {
return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT
@@ -482,7 +482,7 @@ internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirC
scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
)
) {
return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT
@@ -203,7 +203,7 @@ class FakeOverrideGenerator(
// But they are treated differently in IR (real declarations have already been declared before) and such methods are present among realDeclarationSymbols
if (originalSymbol in realDeclarationSymbols) return
if (!session.visibilityChecker.isVisibleForOverriding(session, klass.moduleData, klass.symbol, originalDeclaration)) return
if (!session.visibilityChecker.isVisibleForOverriding(klass.moduleData, klass.symbol, originalDeclaration)) return
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
val baseSymbol = originalSymbol.unwrapSubstitutionAndIntersectionOverrides() as S
@@ -57,7 +57,6 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
}
override fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility,
@@ -64,7 +64,6 @@ abstract class FirVisibilityChecker : FirSessionComponent {
}
override fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility,
@@ -117,28 +116,23 @@ abstract class FirVisibilityChecker : FirSessionComponent {
}
fun isVisibleForOverriding(
session: FirSession,
candidateInDerivedClass: FirMemberDeclaration,
candidateInBaseClass: FirMemberDeclaration
): Boolean = isVisibleForOverriding(session, candidateInDerivedClass.moduleData, candidateInDerivedClass.symbol, candidateInBaseClass)
): Boolean = isVisibleForOverriding(candidateInDerivedClass.moduleData, candidateInDerivedClass.symbol, candidateInBaseClass)
fun isVisibleForOverriding(
session: FirSession,
derivedClassModuleData: FirModuleData,
symbolFromDerivedClass: FirBasedSymbol<*>,
candidateInBaseClass: FirMemberDeclaration,
): Boolean = when (candidateInBaseClass.visibility) {
Visibilities.Internal -> {
candidateInBaseClass.moduleData == derivedClassModuleData ||
(derivedClassModuleData == session.moduleData &&
session.moduleVisibilityChecker?.isInFriendModule(candidateInBaseClass) == true)
derivedClassModuleData.session.moduleVisibilityChecker?.isInFriendModule(candidateInBaseClass) == true
}
Visibilities.Private, Visibilities.PrivateToThis -> false
Visibilities.Protected -> true
else -> platformOverrideVisibilityCheck(
session, symbolFromDerivedClass, candidateInBaseClass.symbol, candidateInBaseClass.visibility
)
else -> platformOverrideVisibilityCheck(symbolFromDerivedClass, candidateInBaseClass.symbol, candidateInBaseClass.visibility)
}
private fun FirMemberDeclaration.containingNonLocalClass(
@@ -261,7 +255,6 @@ abstract class FirVisibilityChecker : FirSessionComponent {
): Boolean
protected abstract fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility,
@@ -95,7 +95,7 @@ class FirStatusResolver(
scope.processPropertiesByName(property.name) {}
scope.processDirectOverriddenPropertiesWithBaseScope(property.symbol) { overriddenSymbol, _ ->
if (session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = property, candidateInBaseClass = overriddenSymbol.fir
candidateInDerivedClass = property, candidateInBaseClass = overriddenSymbol.fir
)
) {
this += overriddenSymbol.fir
@@ -135,7 +135,7 @@ class FirStatusResolver(
scope.processFunctionsByName(function.name) {}
scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ ->
if (session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = function, candidateInBaseClass = overriddenSymbol.fir
candidateInDerivedClass = function, candidateInBaseClass = overriddenSymbol.fir
)
) {
this += overriddenSymbol.fir