[LL API] Ensure that the session is valid right after entering the lock

This commit is contained in:
Yan Zhulanow
2023-02-27 23:02:42 +09:00
committed by Space Team
parent f0de570b55
commit f353199b7b
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder
import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.lockWithPCECheck
import org.jetbrains.kotlin.fir.declarations.FirFile
import java.util.concurrent.locks.ReentrantLock
@@ -18,11 +20,17 @@ internal class LLFirLockProvider {
private val globalLock = ReentrantLock()
inline fun <R> withLock(
@Suppress("UNUSED_PARAMETER") key: FirFile,
key: FirFile,
lockingIntervalMs: Long = DEFAULT_LOCKING_INTERVAL,
action: () -> R
): R {
return globalLock.lockWithPCECheck(lockingIntervalMs) { action() }
return globalLock.lockWithPCECheck(lockingIntervalMs) {
val session = key.llFirSession
if (!session.isValid) {
throw ProcessCanceledException()
}
action()
}
}
}