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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user