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.processFunctionsByName(name) {}
scope.processOverriddenFunctionsFromSuperClasses(symbol, containingClass) { overriddenSymbol -> scope.processOverriddenFunctionsFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding( if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
) )
) { ) {
return@processOverriddenFunctionsFromSuperClasses ProcessorAction.NEXT return@processOverriddenFunctionsFromSuperClasses ProcessorAction.NEXT
@@ -446,7 +446,7 @@ internal fun FirProperty.processOverriddenPropertySymbols(
val overriddenSet = mutableSetOf<IrPropertySymbol>() val overriddenSet = mutableSetOf<IrPropertySymbol>()
scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol -> scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding( if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
) )
) { ) {
return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT
@@ -482,7 +482,7 @@ internal fun FirProperty.generateOverriddenAccessorSymbols(containingClass: FirC
scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol -> scope.processOverriddenPropertiesFromSuperClasses(symbol, containingClass) { overriddenSymbol ->
if (!session.visibilityChecker.isVisibleForOverriding( if (!session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir candidateInDerivedClass = symbol.fir, candidateInBaseClass = overriddenSymbol.fir
) )
) { ) {
return@processOverriddenPropertiesFromSuperClasses ProcessorAction.NEXT 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 // 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 (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 origin = IrDeclarationOrigin.FAKE_OVERRIDE
val baseSymbol = originalSymbol.unwrapSubstitutionAndIntersectionOverrides() as S val baseSymbol = originalSymbol.unwrapSubstitutionAndIntersectionOverrides() as S
@@ -57,7 +57,6 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
} }
override fun platformOverrideVisibilityCheck( override fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>, candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>, symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility, visibilityInBaseClass: Visibility,
@@ -64,7 +64,6 @@ abstract class FirVisibilityChecker : FirSessionComponent {
} }
override fun platformOverrideVisibilityCheck( override fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>, candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>, symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility, visibilityInBaseClass: Visibility,
@@ -117,28 +116,23 @@ abstract class FirVisibilityChecker : FirSessionComponent {
} }
fun isVisibleForOverriding( fun isVisibleForOverriding(
session: FirSession,
candidateInDerivedClass: FirMemberDeclaration, candidateInDerivedClass: FirMemberDeclaration,
candidateInBaseClass: FirMemberDeclaration candidateInBaseClass: FirMemberDeclaration
): Boolean = isVisibleForOverriding(session, candidateInDerivedClass.moduleData, candidateInDerivedClass.symbol, candidateInBaseClass) ): Boolean = isVisibleForOverriding(candidateInDerivedClass.moduleData, candidateInDerivedClass.symbol, candidateInBaseClass)
fun isVisibleForOverriding( fun isVisibleForOverriding(
session: FirSession,
derivedClassModuleData: FirModuleData, derivedClassModuleData: FirModuleData,
symbolFromDerivedClass: FirBasedSymbol<*>, symbolFromDerivedClass: FirBasedSymbol<*>,
candidateInBaseClass: FirMemberDeclaration, candidateInBaseClass: FirMemberDeclaration,
): Boolean = when (candidateInBaseClass.visibility) { ): Boolean = when (candidateInBaseClass.visibility) {
Visibilities.Internal -> { Visibilities.Internal -> {
candidateInBaseClass.moduleData == derivedClassModuleData || candidateInBaseClass.moduleData == derivedClassModuleData ||
(derivedClassModuleData == session.moduleData && derivedClassModuleData.session.moduleVisibilityChecker?.isInFriendModule(candidateInBaseClass) == true
session.moduleVisibilityChecker?.isInFriendModule(candidateInBaseClass) == true)
} }
Visibilities.Private, Visibilities.PrivateToThis -> false Visibilities.Private, Visibilities.PrivateToThis -> false
Visibilities.Protected -> true Visibilities.Protected -> true
else -> platformOverrideVisibilityCheck( else -> platformOverrideVisibilityCheck(symbolFromDerivedClass, candidateInBaseClass.symbol, candidateInBaseClass.visibility)
session, symbolFromDerivedClass, candidateInBaseClass.symbol, candidateInBaseClass.visibility
)
} }
private fun FirMemberDeclaration.containingNonLocalClass( private fun FirMemberDeclaration.containingNonLocalClass(
@@ -261,7 +255,6 @@ abstract class FirVisibilityChecker : FirSessionComponent {
): Boolean ): Boolean
protected abstract fun platformOverrideVisibilityCheck( protected abstract fun platformOverrideVisibilityCheck(
session: FirSession,
candidateInDerivedClass: FirBasedSymbol<*>, candidateInDerivedClass: FirBasedSymbol<*>,
symbolInBaseClass: FirBasedSymbol<*>, symbolInBaseClass: FirBasedSymbol<*>,
visibilityInBaseClass: Visibility, visibilityInBaseClass: Visibility,
@@ -95,7 +95,7 @@ class FirStatusResolver(
scope.processPropertiesByName(property.name) {} scope.processPropertiesByName(property.name) {}
scope.processDirectOverriddenPropertiesWithBaseScope(property.symbol) { overriddenSymbol, _ -> scope.processDirectOverriddenPropertiesWithBaseScope(property.symbol) { overriddenSymbol, _ ->
if (session.visibilityChecker.isVisibleForOverriding( if (session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = property, candidateInBaseClass = overriddenSymbol.fir candidateInDerivedClass = property, candidateInBaseClass = overriddenSymbol.fir
) )
) { ) {
this += overriddenSymbol.fir this += overriddenSymbol.fir
@@ -135,7 +135,7 @@ class FirStatusResolver(
scope.processFunctionsByName(function.name) {} scope.processFunctionsByName(function.name) {}
scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ -> scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ ->
if (session.visibilityChecker.isVisibleForOverriding( if (session.visibilityChecker.isVisibleForOverriding(
session, candidateInDerivedClass = function, candidateInBaseClass = overriddenSymbol.fir candidateInDerivedClass = function, candidateInBaseClass = overriddenSymbol.fir
) )
) { ) {
this += overriddenSymbol.fir this += overriddenSymbol.fir