[LL FIR] resolve file to import phase only under lock
^KT-56551
This commit is contained in:
committed by
Space Team
parent
8e3469f220
commit
81ff3916e6
+8
-10
@@ -19,12 +19,12 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.rethrowExceptionWithDetails
|
import org.jetbrains.kotlin.analysis.utils.errors.rethrowExceptionWithDetails
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||||
|
|
||||||
internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirModuleResolveComponents) {
|
internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirModuleResolveComponents) {
|
||||||
/**
|
/**
|
||||||
@@ -120,7 +120,8 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
|||||||
onAirCreatedDeclaration: Boolean,
|
onAirCreatedDeclaration: Boolean,
|
||||||
towerDataContextCollector: FirTowerDataContextCollector?,
|
towerDataContextCollector: FirTowerDataContextCollector?,
|
||||||
) {
|
) {
|
||||||
resolveFileToImportsWithoutLock(designation.firFile)
|
resolveFileToImportsWithLock(designation.firFile)
|
||||||
|
|
||||||
val target = when (designation.target) {
|
val target = when (designation.target) {
|
||||||
is FirRegularClass -> LLFirClassWithAllMembersResolveTarget(designation.firFile, designation.path, designation.target)
|
is FirRegularClass -> LLFirClassWithAllMembersResolveTarget(designation.firFile, designation.path, designation.target)
|
||||||
else -> LLFirSingleResolveTarget(designation.firFile, designation.path, designation.target)
|
else -> LLFirSingleResolveTarget(designation.firFile, designation.path, designation.target)
|
||||||
@@ -145,16 +146,13 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
|||||||
private fun resolveContainingFileToImports(target: FirElementWithResolveState) {
|
private fun resolveContainingFileToImports(target: FirElementWithResolveState) {
|
||||||
if (target.resolvePhase >= FirResolvePhase.IMPORTS) return
|
if (target.resolvePhase >= FirResolvePhase.IMPORTS) return
|
||||||
val firFile = target.getContainingFile() ?: return
|
val firFile = target.getContainingFile() ?: return
|
||||||
if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return
|
resolveFileToImportsWithLock(firFile)
|
||||||
moduleComponents.globalResolveComponents.lockProvider.withWriteLock(firFile, FirResolvePhase.IMPORTS) {
|
|
||||||
resolveFileToImportsWithoutLock(firFile)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveFileToImportsWithoutLock(firFile: FirFile) {
|
private fun resolveFileToImportsWithLock(firFile: FirFile) {
|
||||||
if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return
|
moduleComponents.globalResolveComponents.lockProvider.withWriteLock(firFile, FirResolvePhase.IMPORTS) {
|
||||||
checkCanceled()
|
firFile.transformSingle(FirImportResolveTransformer(firFile.moduleData.session), null)
|
||||||
firFile.transform<FirElement, Any?>(FirImportResolveTransformer(firFile.moduleData.session), null)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun lazyResolveTargets(
|
private fun lazyResolveTargets(
|
||||||
|
|||||||
Reference in New Issue
Block a user