Move substitution override unwrapping to FirVisibilityChecker

This is because it is only needed for the declaration itself, not for
the containing class. Currently there is no difference because
`containingNonLocalClass` will look at the dispatch receiver argument if
one exists anyway, and for substitution/intersection overrides one must
exist.
This commit is contained in:
pyos
2022-10-06 13:13:08 +02:00
committed by Space Team
parent 40f1bc8480
commit 9f65c6022c
2 changed files with 7 additions and 25 deletions
@@ -87,7 +87,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
supertypeSupplier: SupertypeSupplier = SupertypeSupplier.Default supertypeSupplier: SupertypeSupplier = SupertypeSupplier.Default
): Boolean { ): Boolean {
if (!isSpecificDeclarationVisible( if (!isSpecificDeclarationVisible(
declaration, if (declaration is FirCallableDeclaration) declaration.originalOrSelf() else declaration,
session, session,
useSiteFile, useSiteFile,
containingDeclarations, containingDeclarations,
@@ -28,27 +28,16 @@ fun FirVisibilityChecker.isVisible(
declaration: FirMemberDeclaration, declaration: FirMemberDeclaration,
callInfo: CallInfo, callInfo: CallInfo,
dispatchReceiverValue: ReceiverValue? dispatchReceiverValue: ReceiverValue?
): Boolean { ): Boolean =
if (declaration is FirCallableDeclaration && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) { isVisible(
@Suppress("UNCHECKED_CAST")
return isVisible(declaration.originalIfFakeOverride() as FirMemberDeclaration, callInfo, dispatchReceiverValue)
}
val useSiteFile = callInfo.containingFile
val containingDeclarations = callInfo.containingDeclarations
val session = callInfo.session
return isVisible(
declaration, declaration,
session, callInfo.session,
useSiteFile, callInfo.containingFile,
containingDeclarations, callInfo.containingDeclarations,
dispatchReceiverValue, dispatchReceiverValue,
callInfo.callSite is FirVariableAssignment callInfo.callSite is FirVariableAssignment
) )
}
fun FirVisibilityChecker.isVisible( fun FirVisibilityChecker.isVisible(
declaration: FirMemberDeclaration, declaration: FirMemberDeclaration,
candidate: Candidate candidate: Candidate
@@ -66,14 +55,7 @@ fun FirVisibilityChecker.isVisible(
val backingField = declaration.getBackingFieldIfApplicable() val backingField = declaration.getBackingFieldIfApplicable()
if (backingField != null) { if (backingField != null) {
candidate.hasVisibleBackingField = isVisible( candidate.hasVisibleBackingField = isVisible(backingField, callInfo, candidate.dispatchReceiverValue)
backingField,
callInfo.session,
callInfo.containingFile,
callInfo.containingDeclarations,
candidate.dispatchReceiverValue,
candidate.callInfo.callSite is FirVariableAssignment,
)
} }
return true return true