From 52a88f7858c8d48c75850872cc8dcfc369ec2767 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Oct 2022 22:37:36 +0200 Subject: [PATCH] [Low Level FIR] do not use the same LLFirModuleLazyDeclarationResolver for the supertype computation LLFirModuleLazyDeclarationResolver is bound to module, and should be taken from corrsponding FirSession --- .../LLFirModuleLazyDeclarationResolver.kt | 6 +++--- ...rDesignatedSupertypeResolverTransformer.kt | 21 +++++++++++-------- .../transformers/LazyTransformerFactory.kt | 6 +++--- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt index e741081caef..afc8e38f099 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt @@ -193,7 +193,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod phase = currentPhase, designation = it, scopeSession = scopeSession, - lazyDeclarationResolver = this, + lockProvider = moduleComponents.globalResolveComponents.lockProvider, towerDataContextCollector = collector, firProviderInterceptor = null, checkPCE = checkPCE, @@ -377,7 +377,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod phase = currentPhase, designation = designation, scopeSession = scopeSession, - lazyDeclarationResolver = this, + lockProvider = moduleComponents.globalResolveComponents.lockProvider, towerDataContextCollector = null, firProviderInterceptor = null, checkPCE = checkPCE, @@ -412,7 +412,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod phase = currentPhase, designation = designation, scopeSession = scopeSession, - lazyDeclarationResolver = this, + lockProvider = moduleComponents.globalResolveComponents.lockProvider, towerDataContextCollector = towerDataContextCollector, firProviderInterceptor = firProviderInterceptor, checkPCE = checkPCE, diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedSupertypeResolverTransformer.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedSupertypeResolverTransformer.kt index 0ba1b01594b..7d3ad66672b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedSupertypeResolverTransformer.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedSupertypeResolverTransformer.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirModuleLazyDeclarationResolver import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer.Companion.updatePhaseDeep import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase @@ -32,7 +33,6 @@ internal class LLFirDesignatedSupertypeResolverTransformer( private val designation: FirDeclarationDesignationWithFile, private val session: FirSession, private val scopeSession: ScopeSession, - private val firLazyDeclarationResolver: LLFirModuleLazyDeclarationResolver, private val lockProvider: LLFirLockProvider, private val firProviderInterceptor: FirProviderInterceptor?, private val checkPCE: Boolean, @@ -80,14 +80,17 @@ internal class LLFirDesignatedSupertypeResolverTransformer( for (nowVisit in toVisit) { if (checkPCE) checkCanceled() val resolver = DesignatedFirSupertypeResolverVisitor(nowVisit) - lockProvider.runCustomResolveUnderLock(nowVisit.firFile, checkPCE) { - firLazyDeclarationResolver.lazyResolveFileDeclaration( - firFile = nowVisit.firFile, - toPhase = FirResolvePhase.IMPORTS, - scopeSession = scopeSession, - checkPCE = true, - ) - nowVisit.firFile.accept(resolver, null) + val session = nowVisit.firFile.llFirResolvableSession + if (session != null) { + lockProvider.runCustomResolveUnderLock(nowVisit.firFile, checkPCE) { + session.moduleComponents.firModuleLazyDeclarationResolver.lazyResolveFileDeclaration( + firFile = nowVisit.firFile, + toPhase = FirResolvePhase.IMPORTS, + scopeSession = scopeSession, + checkPCE = checkPCE, + ) + nowVisit.firFile.accept(resolver, null) + } } resolver.declarationTransformer.ensureDesignationPassed() visited[nowVisit.declaration] = nowVisit diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LazyTransformerFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LazyTransformerFactory.kt index 83fec7e2a68..1456c293c02 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LazyTransformerFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LazyTransformerFactory.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDeclarationDesignationWithFile +import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirModuleLazyDeclarationResolver internal object LazyTransformerFactory { @@ -17,7 +18,7 @@ internal object LazyTransformerFactory { phase: FirResolvePhase, designation: FirDeclarationDesignationWithFile, scopeSession: ScopeSession, - lazyDeclarationResolver: LLFirModuleLazyDeclarationResolver, + lockProvider: LLFirLockProvider, towerDataContextCollector: FirTowerDataContextCollector?, firProviderInterceptor: FirProviderInterceptor?, checkPCE: Boolean, @@ -31,8 +32,7 @@ internal object LazyTransformerFactory { designation = designation, session = designation.firFile.moduleData.session, scopeSession = scopeSession, - firLazyDeclarationResolver = lazyDeclarationResolver, - lockProvider = lazyDeclarationResolver.moduleComponents.globalResolveComponents.lockProvider, + lockProvider = lockProvider, firProviderInterceptor = firProviderInterceptor, checkPCE = checkPCE, )