diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelAction/GradleDaemonModelHolder.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelAction/GradleDaemonModelHolder.java index 460476f6fc08..561ef1425ad4 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelAction/GradleDaemonModelHolder.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelAction/GradleDaemonModelHolder.java @@ -116,7 +116,7 @@ public class GradleDaemonModelHolder { } private @NotNull List pollPendingConvertedNestedBuilds() { - List builds = GradleExecutorServiceUtil.poolPendingResult(myConvertedBuilds); + List builds = GradleExecutorServiceUtil.firstOrNull(myConvertedBuilds); return builds == null ? Collections.emptyList() : builds; } diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/util/GradleExecutorServiceUtil.kt b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/util/GradleExecutorServiceUtil.kt index e6b7d163cd3d..d1baf875f9c0 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/util/GradleExecutorServiceUtil.kt +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/util/GradleExecutorServiceUtil.kt @@ -1,7 +1,9 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.gradle.toolingExtension.impl.util +import com.intellij.util.ExceptionUtilRt import io.opentelemetry.context.Context +import org.jetbrains.plugins.gradle.tooling.Exceptions import java.util.concurrent.* import java.util.function.Function @@ -20,7 +22,7 @@ object GradleExecutorServiceUtil { try { executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS) } - catch (e: InterruptedException) { + catch (_: InterruptedException) { Thread.currentThread().interrupt() } } @@ -41,28 +43,31 @@ object GradleExecutorServiceUtil { @JvmStatic fun pollAllPendingResults(queue: BlockingQueue>): MutableList { val results = ArrayList() - var result = poolPendingResult(queue) - while (result != null) { - results.add(result) - result = poolPendingResult(queue) + var next = drainEntry(queue) + while (next != null) { + next.onSuccess { + results.add(it) + } + next = drainEntry(queue) } return results } @JvmStatic - fun poolPendingResult(queue: BlockingQueue>): T? { - try { + fun firstOrNull(queue: BlockingQueue>): T? = drainEntry(queue)?.getOrNull() + + private fun drainEntry(queue: BlockingQueue>): Result? { + return runCatching { val future = queue.poll() if (future == null) { return null } - return future.get() - } - catch (ignored: InterruptedException) { - return null - } - catch (ignored: ExecutionException) { - return null + return@runCatching future.get() + }.onFailure { + if (it is ExecutionException) { + val exception = Exceptions.unwrap(it) + System.err.println(ExceptionUtilRt.getThrowableText(exception, "org.jetbrains.")) + } } } }