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