diff --git a/platform/util/src/com/intellij/util/concurrency/CancellationBiConsumer.kt b/platform/util/src/com/intellij/util/concurrency/CancellationBiConsumer.kt index 89e19ef2677a..815cd142dee6 100644 --- a/platform/util/src/com/intellij/util/concurrency/CancellationBiConsumer.kt +++ b/platform/util/src/com/intellij/util/concurrency/CancellationBiConsumer.kt @@ -9,7 +9,7 @@ internal class CancellationBiConsumer( private val runnable: BiConsumer, ) : BiConsumer { override fun accept(t: T, u: U) { - runAsCoroutine(job) { + runAsCoroutine(job, completeOnFinish = true) { runnable.accept(t, u) } } diff --git a/platform/util/src/com/intellij/util/concurrency/CancellationCallable.kt b/platform/util/src/com/intellij/util/concurrency/CancellationCallable.kt index b417f120736f..55c40591e3cd 100644 --- a/platform/util/src/com/intellij/util/concurrency/CancellationCallable.kt +++ b/platform/util/src/com/intellij/util/concurrency/CancellationCallable.kt @@ -18,7 +18,7 @@ internal class CancellationCallable( ) : Callable { override fun call(): V { - return runAsCoroutine(job) { + return runAsCoroutine(job, completeOnFinish = true) { callable.call() } } diff --git a/platform/util/src/com/intellij/util/concurrency/CancellationFunction.kt b/platform/util/src/com/intellij/util/concurrency/CancellationFunction.kt index 8182e717c5fa..ddb6e351b88d 100644 --- a/platform/util/src/com/intellij/util/concurrency/CancellationFunction.kt +++ b/platform/util/src/com/intellij/util/concurrency/CancellationFunction.kt @@ -12,7 +12,7 @@ class CancellationFunction internal constructor( ) : Function { override fun apply(t: T): U { - return runAsCoroutine(job) { + return runAsCoroutine(job, completeOnFinish = true) { function.apply(t) } } diff --git a/platform/util/src/com/intellij/util/concurrency/CancellationRunnable.kt b/platform/util/src/com/intellij/util/concurrency/CancellationRunnable.kt index 4a789660c0a0..1b2ec4af0a98 100644 --- a/platform/util/src/com/intellij/util/concurrency/CancellationRunnable.kt +++ b/platform/util/src/com/intellij/util/concurrency/CancellationRunnable.kt @@ -15,7 +15,7 @@ internal class CancellationRunnable( ) : Runnable { override fun run() { - runAsCoroutine(job, runnable) + runAsCoroutine(job, completeOnFinish = true, runnable::run) } override fun toString(): String { diff --git a/platform/util/src/com/intellij/util/concurrency/PeriodicCancellationRunnable.kt b/platform/util/src/com/intellij/util/concurrency/PeriodicCancellationRunnable.kt index 2b3f249468c4..eadbada2994b 100644 --- a/platform/util/src/com/intellij/util/concurrency/PeriodicCancellationRunnable.kt +++ b/platform/util/src/com/intellij/util/concurrency/PeriodicCancellationRunnable.kt @@ -12,7 +12,7 @@ internal class PeriodicCancellationRunnable( override fun run() { // don't complete the job, it can be either failed, or cancelled try { - runAsCoroutine(job, false, runnable::run) + runAsCoroutine(job, completeOnFinish = false, runnable::run) } catch (e: CancellationException) { // According to the specification of the FutureTask, the runnable should not throw in case of cancellation. diff --git a/platform/util/src/com/intellij/util/concurrency/propagation.kt b/platform/util/src/com/intellij/util/concurrency/propagation.kt index e71b1bad6219..a5167c95fc01 100644 --- a/platform/util/src/com/intellij/util/concurrency/propagation.kt +++ b/platform/util/src/com/intellij/util/concurrency/propagation.kt @@ -170,7 +170,7 @@ private fun isContextAwareComputation(runnable: Any): Boolean { */ @Internal @OptIn(DelicateCoroutinesApi::class, ExperimentalCoroutinesApi::class) -fun runAsCoroutine(job: CompletableJob, completeOnFinish: Boolean = true, action: () -> T): T { +fun runAsCoroutine(job: CompletableJob, completeOnFinish: Boolean, action: () -> T): T { val originalPCE: Ref = Ref(null) val deferred = GlobalScope.async( // we need to have a job in CoroutineContext so that `Deferred` becomes its child and properly delays cancellation @@ -200,12 +200,6 @@ fun runAsCoroutine(job: CompletableJob, completeOnFinish: Boolean = true, ac return deferred.getCompleted() } -/** - * A runnable-friendly overload for usage in Java - * @see runAsCoroutine - */ -fun runAsCoroutine(job: CompletableJob, r: Runnable): Unit = runAsCoroutine(job, action = r::run) - internal fun capturePropagationAndCancellationContext(command: Runnable): Runnable { if (isContextAwareComputation(command)) { return command