Skip to content

Commit 5955917

Browse files
mpetrovelizarov
authored andcommitted
Update Tasks to support Play Services 16.
This changed the task result to @nullable, so some additional casting is required to compile. The T in Task<T> is not currectly annotated, but it should really be matching the nullability of the result.
1 parent 709f6d7 commit 5955917

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

integration/kotlinx-coroutines-play-services/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import java.util.zip.ZipFile
77
* Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
88
*/
99

10-
ext.tasks_version = '15.0.1'
10+
ext.tasks_version = '16.0.1'
1111

1212
def attr = Attribute.of("artifactType", String.class)
1313
configurations {

integration/kotlinx-coroutines-play-services/src/Tasks.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public fun <T> Task<T>.asDeferred(): Deferred<T> {
5050
if (isComplete) {
5151
val e = exception
5252
return if (e == null) {
53-
CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result) }
53+
@Suppress("UNCHECKED_CAST")
54+
CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result as T) }
5455
} else {
5556
CompletableDeferred<T>().apply { completeExceptionally(e) }
5657
}
@@ -60,7 +61,8 @@ public fun <T> Task<T>.asDeferred(): Deferred<T> {
6061
addOnCompleteListener {
6162
val e = it.exception
6263
if (e == null) {
63-
if (isCanceled) result.cancel() else result.complete(it.result)
64+
@Suppress("UNCHECKED_CAST")
65+
if (isCanceled) result.cancel() else result.complete(it.result as T)
6466
} else {
6567
result.completeExceptionally(e)
6668
}
@@ -83,7 +85,8 @@ public suspend fun <T> Task<T>.await(): T {
8385
if (isCanceled) {
8486
throw CancellationException("Task $this was cancelled normally.")
8587
} else {
86-
result
88+
@Suppress("UNCHECKED_CAST")
89+
result as T
8790
}
8891
} else {
8992
throw e
@@ -94,7 +97,8 @@ public suspend fun <T> Task<T>.await(): T {
9497
addOnCompleteListener {
9598
val e = exception
9699
if (e == null) {
97-
if (isCanceled) cont.cancel() else cont.resume(result)
100+
@Suppress("UNCHECKED_CAST")
101+
if (isCanceled) cont.cancel() else cont.resume(result as T)
98102
} else {
99103
cont.resumeWithException(e)
100104
}

integration/kotlinx-coroutines-play-services/test/TaskTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ class TaskTest : TestBase() {
9292
assertEquals(42, deferred.await())
9393
}
9494

95+
@Test
96+
fun testNullResultTaskAsDeferred() = runTest {
97+
assertNull(Tasks.forResult(null).asDeferred().await())
98+
}
99+
95100
@Test
96101
fun testCancelledTaskAsDeferred() = runTest {
97102
val deferred = Tasks.forCanceled<Int>().asDeferred()

0 commit comments

Comments
 (0)