From 8bcba00bb78e0ae9db37f82d52586be3d181dcf4 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 9 Sep 2020 12:49:22 +0300 Subject: [PATCH] FIR IDE: do not resolve declarations if they are already resolved when we are inside lock --- .../idea/fir/low/level/api/file/builder/FirFileBuilder.kt | 2 +- .../low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt index dea402eba5d..b7ed1290047 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/FirFileBuilder.kt @@ -45,7 +45,7 @@ internal class FirFileBuilder( val firFile = buildRawFirFileWithCaching(ktFile, cache) if (toPhase > FirResolvePhase.RAW_FIR) { cache.firFileLockProvider.withLock(firFile) { - //add lock for implit type resolve phase & super type + if (firFile.resolvePhase >= toPhase) return@withLock runResolveWithoutLock(firFile, fromPhase = firFile.resolvePhase, toPhase = toPhase, checkPCE = checkPCE) } } 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 f267493158b..0e1c0189076 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 @@ -75,6 +75,7 @@ internal class FirLazyDeclarationResolver( towerDataContextCollector: FirTowerDataContextCollector? = null, checkPCE: Boolean ) { + if (firDeclarationToResolve.resolvePhase >= toPhase) return val nonLazyPhase = minOf(toPhase, FirResolvePhase.DECLARATIONS) if (firDeclarationToResolve.resolvePhase < nonLazyPhase) { firFileBuilder.runResolveWithoutLock(