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) + } + } }