FIR visibility checker: remove redundant session from isVisibleForOverriding
This commit is contained in:
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user