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
): Boolean {
if (!isSpecificDeclarationVisible(
declaration,
if (declaration is FirCallableDeclaration) declaration.originalOrSelf() else declaration,
session,
useSiteFile,
containingDeclarations,
@@ -28,27 +28,16 @@ fun FirVisibilityChecker.isVisible(
declaration: FirMemberDeclaration,
callInfo: CallInfo,
dispatchReceiverValue: ReceiverValue?
): Boolean {
if (declaration is FirCallableDeclaration && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) {
@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(
): Boolean =
isVisible(
declaration,
session,
useSiteFile,
containingDeclarations,
callInfo.session,
callInfo.containingFile,
callInfo.containingDeclarations,
dispatchReceiverValue,
callInfo.callSite is FirVariableAssignment
)
}
fun FirVisibilityChecker.isVisible(
declaration: FirMemberDeclaration,
candidate: Candidate
@@ -66,14 +55,7 @@ fun FirVisibilityChecker.isVisible(
val backingField = declaration.getBackingFieldIfApplicable()
if (backingField != null) {
candidate.hasVisibleBackingField = isVisible(
backingField,
callInfo.session,
callInfo.containingFile,
callInfo.containingDeclarations,
candidate.dispatchReceiverValue,
candidate.callInfo.callSite is FirVariableAssignment,
)
candidate.hasVisibleBackingField = isVisible(backingField, callInfo, candidate.dispatchReceiverValue)
}
return true