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.
diff --git a/integration/kotlinx-coroutines-play-services/build.gradle b/integration/kotlinx-coroutines-play-services/build.gradle
index 51cce3f..61201fa 100644
--- a/integration/kotlinx-coroutines-play-services/build.gradle
+++ b/integration/kotlinx-coroutines-play-services/build.gradle
@@ -7,7 +7,7 @@
* Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-ext.tasks_version = '15.0.1'
+ext.tasks_version = '16.0.1'
def attr = Attribute.of("artifactType", String.class)
configurations {
diff --git a/integration/kotlinx-coroutines-play-services/src/Tasks.kt b/integration/kotlinx-coroutines-play-services/src/Tasks.kt
index 14fd961..4952daa 100644
--- a/integration/kotlinx-coroutines-play-services/src/Tasks.kt
+++ b/integration/kotlinx-coroutines-play-services/src/Tasks.kt
@@ -50,7 +50,8 @@
if (isComplete) {
val e = exception
return if (e == null) {
- CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result) }
+ @Suppress("UNCHECKED_CAST")
+ CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result as T) }
} else {
CompletableDeferred<T>().apply { completeExceptionally(e) }
}
@@ -60,7 +61,8 @@
addOnCompleteListener {
val e = it.exception
if (e == null) {
- if (isCanceled) result.cancel() else result.complete(it.result)
+ @Suppress("UNCHECKED_CAST")
+ if (isCanceled) result.cancel() else result.complete(it.result as T)
} else {
result.completeExceptionally(e)
}
@@ -83,7 +85,8 @@
if (isCanceled) {
throw CancellationException("Task $this was cancelled normally.")
} else {
- result
+ @Suppress("UNCHECKED_CAST")
+ result as T
}
} else {
throw e
@@ -94,7 +97,8 @@
addOnCompleteListener {
val e = exception
if (e == null) {
- if (isCanceled) cont.cancel() else cont.resume(result)
+ @Suppress("UNCHECKED_CAST")
+ if (isCanceled) cont.cancel() else cont.resume(result as T)
} else {
cont.resumeWithException(e)
}
diff --git a/integration/kotlinx-coroutines-play-services/test/TaskTest.kt b/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
index 15c302b..b87a295 100644
--- a/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
+++ b/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
@@ -93,6 +93,11 @@
}
@Test
+ fun testNullResultTaskAsDeferred() = runTest {
+ assertNull(Tasks.forResult(null).asDeferred().await())
+ }
+
+ @Test
fun testCancelledTaskAsDeferred() = runTest {
val deferred = Tasks.forCanceled<Int>().asDeferred()