mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
RDCT-1013 Propagate client id to ProcessIOExecutorService tasks
fix wrapping order GitOrigin-RevId: 42f20125fbf85a5fd4529eca68879bab7b2b1d98
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9b01ee2565
commit
a265d940fb
@@ -7,6 +7,8 @@ package com.intellij.codeWithMe
|
||||
import com.intellij.util.Processor
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.FutureTask
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.function.BiConsumer
|
||||
import java.util.function.Function
|
||||
|
||||
@@ -91,3 +93,35 @@ fun <T, U> decorateBiConsumer(biConsumer: BiConsumer<T, U>): BiConsumer<T, U> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> decorateFutureTask(futureTask: FutureTask<T>): FutureTask<T> {
|
||||
if (!propagateClientIdAcrossThreads) return futureTask
|
||||
val currentId = currentClientIdString
|
||||
return object : FutureTask<T>({ null }) {
|
||||
override fun run() {
|
||||
withClientId(currentId) {
|
||||
futureTask.run()
|
||||
}
|
||||
}
|
||||
|
||||
override fun cancel(mayInterruptIfRunning: Boolean): Boolean {
|
||||
return futureTask.cancel(mayInterruptIfRunning)
|
||||
}
|
||||
|
||||
override fun isCancelled(): Boolean {
|
||||
return futureTask.isCancelled
|
||||
}
|
||||
|
||||
override fun isDone(): Boolean {
|
||||
return futureTask.isDone
|
||||
}
|
||||
|
||||
override fun get(): T {
|
||||
return futureTask.get()
|
||||
}
|
||||
|
||||
override fun get(timeout: Long, unit: TimeUnit): T {
|
||||
return futureTask.get(timeout, unit)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import static com.intellij.codeWithMe.ClientIdPropagation.decorateCallable;
|
||||
import static com.intellij.codeWithMe.ClientIdPropagation.decorateFutureTask;
|
||||
import static com.intellij.codeWithMe.ClientIdPropagation.decorateRunnable;
|
||||
import static com.intellij.util.concurrency.AppExecutorUtil.propagateContextOrCancellation;
|
||||
|
||||
@@ -234,13 +234,13 @@ public final class AppScheduledExecutorService extends SchedulingWrapper {
|
||||
if (!propagateContextOrCancellation()) {
|
||||
return command;
|
||||
}
|
||||
return Propagation.capturePropagationAndCancellationContext(decorateRunnable(command));
|
||||
return decorateRunnable(Propagation.capturePropagationAndCancellationContext(command));
|
||||
}
|
||||
|
||||
public static <T> @NotNull FutureTask<T> capturePropagationAndCancellationContext(@NotNull Callable<T> callable) {
|
||||
if (!propagateContextOrCancellation()) {
|
||||
return new FutureTask<>(callable);
|
||||
}
|
||||
return Propagation.capturePropagationAndCancellationContext(decorateCallable(callable));
|
||||
return decorateFutureTask(Propagation.capturePropagationAndCancellationContext(callable));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user