[AA FIR] KtFirOverrideInfoProvider: resolve to status only if needed

^KT-56551
This commit is contained in:
Dmitrii Gridin
2023-05-16 16:40:07 +02:00
committed by Space Team
parent b88cde11b1
commit b713dfd7ea
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -35,11 +35,12 @@ internal class KtFirOverrideInfoProvider(
require(memberSymbol is KtFirSymbol<*>) require(memberSymbol is KtFirSymbol<*>)
require(classSymbol is KtFirSymbol<*>) require(classSymbol is KtFirSymbol<*>)
// Inspecting visibility requires resolving to status
classSymbol.firSymbol.lazyResolveToPhase(FirResolvePhase.STATUS)
val memberFir = memberSymbol.firSymbol.fir as? FirCallableDeclaration ?: return false val memberFir = memberSymbol.firSymbol.fir as? FirCallableDeclaration ?: return false
val parentClassFir = classSymbol.firSymbol.fir as? FirClass ?: return false val parentClassFir = classSymbol.firSymbol.fir as? FirClass ?: return false
// Inspecting visibility requires resolving to status
classSymbol.firSymbol.lazyResolveToPhase(FirResolvePhase.STATUS)
return memberFir.isVisibleInClass(parentClassFir) return memberFir.isVisibleInClass(parentClassFir)
} }
@@ -48,9 +49,9 @@ internal class KtFirOverrideInfoProvider(
require(parentClassSymbol is KtFirSymbol<*>) require(parentClassSymbol is KtFirSymbol<*>)
// Inspecting implementation status requires resolving to status // Inspecting implementation status requires resolving to status
parentClassSymbol.firSymbol.lazyResolveToPhase(FirResolvePhase.STATUS)
val memberFir = memberSymbol.firSymbol.fir as? FirCallableDeclaration ?: return null val memberFir = memberSymbol.firSymbol.fir as? FirCallableDeclaration ?: return null
val parentClassFir = parentClassSymbol.firSymbol.fir as? FirClass ?: return null val parentClassFir = parentClassSymbol.firSymbol.fir as? FirClass ?: return null
memberFir.lazyResolveToPhase(FirResolvePhase.STATUS)
return memberFir.symbol.getImplementationStatus( return memberFir.symbol.getImplementationStatus(
SessionHolderImpl( SessionHolderImpl(