From a4426cd40d3e383d3dee0f6fa059502952ebe8cd Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 19 Jul 2021 14:27:02 +0200 Subject: [PATCH] [FIR IDE] Fix invalid partial resolve of file annotations --- .../resolve/FirLazyDeclarationResolver.kt | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt index 103546b8de0..31003aaf0fe 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt @@ -42,7 +42,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui checkPCE: Boolean, collector: FirTowerDataContextCollector? = null, ) { - if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return + if (firFile.resolvePhase >= FirResolvePhase.IMPORTS && annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) return moduleFileCache.firFileLockProvider.runCustomResolveUnderLock(firFile, checkPCE) { resolveFileAnnotationsWithoutLock( firFile = firFile, @@ -65,23 +65,27 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui scopeSession: ScopeSession, collector: FirTowerDataContextCollector? = null, ) { - if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return - lazyResolveFileDeclarationWithoutLock( - firFile = firFile, - moduleFileCache = moduleFileCache, - toPhase = FirResolvePhase.IMPORTS, - scopeSession = scopeSession, - checkPCE = false, - collector = collector - ) + if (firFile.resolvePhase < FirResolvePhase.IMPORTS) { + lazyResolveFileDeclarationWithoutLock( + firFile = firFile, + moduleFileCache = moduleFileCache, + toPhase = FirResolvePhase.IMPORTS, + scopeSession = scopeSession, + checkPCE = false, + collector = collector + ) + } + + if (!annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { + FirFileAnnotationsResolveTransformer( + firFile = firFile, + annotations = annotations, + session = firFile.moduleData.session, + scopeSession = scopeSession, + firTowerDataContextCollector = collector, + ).transformDeclaration(firFileBuilder.firPhaseRunner) + } - FirFileAnnotationsResolveTransformer( - firFile = firFile, - annotations = annotations, - session = firFile.moduleData.session, - scopeSession = scopeSession, - firTowerDataContextCollector = collector, - ).transformDeclaration(firFileBuilder.firPhaseRunner) } private fun FirDeclaration.isValidForResolve(): Boolean = when (origin) {