[LL API] Ensure that the session is valid right after entering the lock
This commit is contained in:
+10
-2
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder
|
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.analysis.low.level.api.fir.util.lockWithPCECheck
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import java.util.concurrent.locks.ReentrantLock
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
@@ -18,11 +20,17 @@ internal class LLFirLockProvider {
|
|||||||
private val globalLock = ReentrantLock()
|
private val globalLock = ReentrantLock()
|
||||||
|
|
||||||
inline fun <R> withLock(
|
inline fun <R> withLock(
|
||||||
@Suppress("UNUSED_PARAMETER") key: FirFile,
|
key: FirFile,
|
||||||
lockingIntervalMs: Long = DEFAULT_LOCKING_INTERVAL,
|
lockingIntervalMs: Long = DEFAULT_LOCKING_INTERVAL,
|
||||||
action: () -> R
|
action: () -> R
|
||||||
): R {
|
): R {
|
||||||
return globalLock.lockWithPCECheck(lockingIntervalMs) { action() }
|
return globalLock.lockWithPCECheck(lockingIntervalMs) {
|
||||||
|
val session = key.llFirSession
|
||||||
|
if (!session.isValid) {
|
||||||
|
throw ProcessCanceledException()
|
||||||
|
}
|
||||||
|
action()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user