[LL FIR] remove redundant function runCustomResolveUnderLock for locking

 Conflicts:
	analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedSupertypeResolverTransformer.kt
This commit is contained in:
Ilya Kirillov
2023-01-04 12:20:19 +01:00
committed by teamcity
parent d6d066d63b
commit 4124a4908f
4 changed files with 6 additions and 19 deletions
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionDepend
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FirElementsRecorder import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FirElementsRecorder
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirNonLocalDeclarationBuilder import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirNonLocalDeclarationBuilder
@@ -247,7 +246,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement) val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement)
return firResolveSession.globalComponents.lockProvider.runCustomResolveUnderLock(originalFirFile) { return firResolveSession.globalComponents.lockProvider.withLock(originalFirFile) {
val copiedFirDeclaration = if (isInBodyReplacement) { val copiedFirDeclaration = if (isInBodyReplacement) {
when (originalDeclaration) { when (originalDeclaration) {
is FirSimpleFunction -> is FirSimpleFunction ->
@@ -26,14 +26,4 @@ internal class LLFirLockProvider {
} }
} }
private const val DEFAULT_LOCKING_INTERVAL = 50L private const val DEFAULT_LOCKING_INTERVAL = 50L
/**
* Runs [resolve] function (which is considered to do some resolve on [firFile]) under a lock for [firFile]
*/
internal inline fun <R> LLFirLockProvider.runCustomResolveUnderLock(
firFile: FirFile,
body: () -> R
): R {
return withLock(key = firFile, lockingIntervalMs = DEFAULT_LOCKING_INTERVAL, body)
}
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveCompone
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidator import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidator
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
@@ -70,7 +69,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
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 if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return
moduleComponents.globalResolveComponents.lockProvider.runCustomResolveUnderLock(firFile) { moduleComponents.globalResolveComponents.lockProvider.withLock(firFile) {
resolveFileToImportsWithoutLock(firFile) resolveFileToImportsWithoutLock(firFile)
} }
} }
@@ -113,7 +112,7 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
for (designation in declarationDesignationsToResolve(target)) { for (designation in declarationDesignationsToResolve(target)) {
if (!designation.target.isValidForResolve()) continue if (!designation.target.isValidForResolve()) continue
if (designation.target.resolvePhase >= toPhase) continue if (designation.target.resolvePhase >= toPhase) continue
moduleComponents.globalResolveComponents.lockProvider.runCustomResolveUnderLock(designation.firFile) { moduleComponents.globalResolveComponents.lockProvider.withLock(designation.firFile) {
runLazyDesignatedResolveWithoutLock( runLazyDesignatedResolveWithoutLock(
designation = designation, designation = designation,
scopeSession = scopeSession, scopeSession = scopeSession,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer.Companion.updatePhaseDeep 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.checkCanceled
@@ -97,7 +96,7 @@ internal class LLFirDesignatedSupertypeResolverTransformer(
checkCanceled() checkCanceled()
val resolver = DesignatedFirSupertypeResolverVisitor(designation) val resolver = DesignatedFirSupertypeResolverVisitor(designation)
designation.firFile.lazyResolveToPhase(FirResolvePhase.IMPORTS) designation.firFile.lazyResolveToPhase(FirResolvePhase.IMPORTS)
lockProvider.runCustomResolveUnderLock(designation.firFile) { lockProvider.withLock(designation.firFile) {
designation.firFile.accept(resolver, null) designation.firFile.accept(resolver, null)
} }
resolver.declarationTransformer.ensureDesignationPassed() resolver.declarationTransformer.ensureDesignationPassed()
@@ -146,7 +145,7 @@ internal class LLFirDesignatedSupertypeResolverTransformer(
val filesToDesignations = designations.groupBy { it.firFile } val filesToDesignations = designations.groupBy { it.firFile }
for (designationsPerFile in filesToDesignations) { for (designationsPerFile in filesToDesignations) {
checkCanceled() checkCanceled()
lockProvider.runCustomResolveUnderLock(designationsPerFile.key) { lockProvider.withLock(designationsPerFile.key) {
val session = designationsPerFile.key.llFirResolvableSession val session = designationsPerFile.key.llFirResolvableSession
?: error("When FirFile exists for the declaration, the session should be resolvevablable") ?: error("When FirFile exists for the declaration, the session should be resolvevablable")
session.moduleComponents.sessionInvalidator.withInvalidationOnException(session) { session.moduleComponents.sessionInvalidator.withInvalidationOnException(session) {