From 31dff4469d86f71a2c578d8ded0100afec2831bf Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Thu, 13 Nov 2025 15:46:44 +0100 Subject: [PATCH] [gradle][tooling extension][IDEA-382098] converted `GradleExecutorServiceUtil` from Java to Kotlin GitOrigin-RevId: 125356ae639424df85072b6e8aee7cf803b9c1a0 --- .../impl/util/GradleExecutorServiceUtil.kt | 90 ++++++++----------- 1 file changed, 39 insertions(+), 51 deletions(-) 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 3ef6a88f17da..e6b7d163cd3d 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,80 +1,68 @@ // 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; +package com.intellij.gradle.toolingExtension.impl.util -import io.opentelemetry.context.Context; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import io.opentelemetry.context.Context +import java.util.concurrent.* +import java.util.function.Function -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.*; -import java.util.function.Function; +object GradleExecutorServiceUtil { -public final class GradleExecutorServiceUtil { - - public static T withSingleThreadExecutor(@NotNull String name, @NotNull Function action) { - ExecutorService executorService = Executors.newSingleThreadExecutor(new SimpleThreadFactory(name)); + @JvmStatic + fun withSingleThreadExecutor(name: String, action: Function): T { + val executorService = Executors.newSingleThreadExecutor { + Thread(it, name) + } try { - return action.apply(executorService); + return action.apply(executorService) } finally { - executorService.shutdown(); + executorService.shutdown() try { - executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS) } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); + catch (e: InterruptedException) { + Thread.currentThread().interrupt() } } } - public static void submitTask( - @NotNull ExecutorService executor, - @NotNull BlockingQueue> queue, - @NotNull Callable task + @JvmStatic + fun submitTask( + executor: ExecutorService, + queue: BlockingQueue>, + task: Callable, ) { - Future taskResult = Context.current() + val taskResult = Context.current() .wrap(executor) - .submit(task); - queue.add(taskResult); + .submit(task) + queue.add(taskResult) } - public static @NotNull List pollAllPendingResults(@NotNull BlockingQueue> queue) { - List results = new ArrayList<>(); - T result = poolPendingResult(queue); + @JvmStatic + fun pollAllPendingResults(queue: BlockingQueue>): MutableList { + val results = ArrayList() + var result = poolPendingResult(queue) while (result != null) { - results.add(result); - result = poolPendingResult(queue); + results.add(result) + result = poolPendingResult(queue) } - return results; + return results } - public static @Nullable T poolPendingResult(@NotNull BlockingQueue> queue) { + @JvmStatic + fun poolPendingResult(queue: BlockingQueue>): T? { try { - Future future = queue.poll(); + val future = queue.poll() if (future == null) { - return null; + return null } - return future.get(); + return future.get() } - catch (InterruptedException | ExecutionException ignored) { - return null; + catch (ignored: InterruptedException) { + return null } - } - - // Use this static class as a simple ThreadFactory to prevent a memory leak when passing an anonymous ThreadFactory object to - // Executors.newSingleThreadExecutor. Memory leak will occur on the Gradle Daemon otherwise. - private static final class SimpleThreadFactory implements ThreadFactory { - - private final String myName; - - private SimpleThreadFactory(@NotNull String name) { - myName = name; - } - - @Override - public Thread newThread(@NotNull Runnable runnable) { - return new Thread(runnable, myName); + catch (ignored: ExecutionException) { + return null } } }