From 9f65c6022c83d68449d3a12fee11a8cd136abec0 Mon Sep 17 00:00:00 2001 From: pyos Date: Thu, 6 Oct 2022 13:13:08 +0200 Subject: [PATCH] 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. --- .../kotlin/fir/FirVisibilityChecker.kt | 2 +- .../fir/resolve/calls/VisibilityUtils.kt | 30 ++++--------------- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index 48d56c7b8bc..2e7c117d68a 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -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, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt index d7dccf43dab..89e6ea3ed23 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/VisibilityUtils.kt @@ -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