[AA FIR] KtFirScopeProvider: use lazy resolve only if needed

^KT-56551
This commit is contained in:
Dmitrii Gridin
2023-05-15 08:47:50 +02:00
committed by Space Team
parent f2da13b39d
commit 01a94624f5
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhaseWithCallableMembers
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
@@ -110,22 +111,23 @@ internal class KtFirScopeProvider(
builder builder
) )
} }
val firScope = classSymbol.withFirForScope { val firScope = classSymbol.withFirForScope {
when (val regularClass = classSymbol.firSymbol.fir) { when (val regularClass = classSymbol.firSymbol.fir) {
is FirJavaClass -> buildJavaEnhancementDeclaredMemberScope(useSiteSession, regularClass.symbol, getScopeSession()) is FirJavaClass -> buildJavaEnhancementDeclaredMemberScope(useSiteSession, regularClass.symbol, getScopeSession())
else -> useSiteSession.declaredMemberScope(it) else -> useSiteSession.declaredMemberScope(it)
} }
} ?: return getEmptyScope() } ?: return getEmptyScope()
return KtFirDelegatingNamesAwareScope(firScope, builder) return KtFirDelegatingNamesAwareScope(firScope, builder)
} }
override fun getDelegatedMemberScope(classSymbol: KtSymbolWithMembers): KtScope { override fun getDelegatedMemberScope(classSymbol: KtSymbolWithMembers): KtScope {
val declaredScope = (getDeclaredMemberScope(classSymbol) as? KtFirDelegatingNamesAwareScope)?.firScope val declaredScope = (getDeclaredMemberScope(classSymbol) as? KtFirDelegatingNamesAwareScope)?.firScope ?: return getEmptyScope()
?: return getEmptyScope()
val firScope = classSymbol.withFirForScope { fir -> val firScope = classSymbol.withFirForScope { fir ->
fir.lazyResolveToPhase(FirResolvePhase.STATUS)
val delegateFields = fir.delegateFields val delegateFields = fir.delegateFields
if (delegateFields.isNotEmpty()) { if (delegateFields.isNotEmpty()) {
fir.lazyResolveToPhaseWithCallableMembers(FirResolvePhase.STATUS)
val firSession = analysisSession.useSiteSession val firSession = analysisSession.useSiteSession
FirDelegatedMemberScope( FirDelegatedMemberScope(
firSession, firSession,