From a49db8902425bb476ab864c76fb0cd5d4ff6fb07 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Mon, 17 Jul 2023 11:56:06 +0200 Subject: [PATCH] [Gradle] CompletableFuture: Add 'isCompleted' API ^KT-60441 Verification Pending --- .../jetbrains/kotlin/gradle/utils/Future.kt | 4 ++++ .../kotlin/gradle/unitTests/FutureTest.kt | 21 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Future.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Future.kt index 20858e94b0c..50f085ae304 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Future.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Future.kt @@ -53,6 +53,7 @@ internal interface LenientFuture : Future { } internal interface CompletableFuture : Future { + val isCompleted: Boolean fun complete(value: T) } @@ -112,6 +113,9 @@ private class FutureImpl( ) : CompletableFuture, Serializable { fun completeWith(result: Result) = deferred.completeWith(result) + override val isCompleted: Boolean + get() = deferred.isCompleted + override fun complete(value: T) { deferred.complete(value) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FutureTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FutureTest.kt index 5c029785574..38aab677aaf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FutureTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FutureTest.kt @@ -20,9 +20,7 @@ import org.jetbrains.kotlin.gradle.utils.* import org.junit.Test import org.junit.jupiter.api.assertThrows import java.util.concurrent.atomic.AtomicInteger -import kotlin.test.assertEquals -import kotlin.test.assertFailsWith -import kotlin.test.assertNull +import kotlin.test.* class FutureTest { @@ -164,4 +162,21 @@ class FutureTest { assertFailsWith { future.getOrThrow() } future.await() } + + @Test + fun `test - future isCompleted`() = project.runLifecycleAwareTest { + val future = CompletableFuture() + assertFalse(future.isCompleted) + + launchInStage(KotlinPluginLifecycle.Stage.AfterFinaliseDsl) { + assertFalse(future.isCompleted) + future.complete(Unit) + assertTrue(future.isCompleted) + } + + launch { + future.await() + assertTrue(future.isCompleted) + } + } }