Convert async {}.await() to withContext(DefaultDispatcher) {}
This fixes incorrect transformation related to KT-24235
This commit is contained in:
+2
-2
@@ -45,8 +45,8 @@ class DeferredResultUnusedInspection(@JvmField var standardOnly: Boolean = true)
|
|||||||
companion object {
|
companion object {
|
||||||
private val shortNames = setOf("async")
|
private val shortNames = setOf("async")
|
||||||
|
|
||||||
private val fqNames: Set<FqName> = shortNames.mapTo(mutableSetOf()) { FqName("kotlinx.coroutines.experimental.$it") }
|
private val fqNames: Set<FqName> = shortNames.mapTo(mutableSetOf()) { FqName("$COROUTINE_PACKAGE.$it") }
|
||||||
|
|
||||||
private val deferred = FqName("kotlinx.coroutines.experimental.Deferred")
|
private val deferred = FqName("$COROUTINE_PACKAGE.Deferred")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+10
-6
@@ -35,8 +35,9 @@ class RedundantAsyncInspection : AbstractCallChainChecker() {
|
|||||||
if (defaultParent != true) return
|
if (defaultParent != true) return
|
||||||
if (defaultContext!! && !defaultStart!!) return
|
if (defaultContext!! && !defaultStart!!) return
|
||||||
|
|
||||||
val replacement =
|
var replacement = conversion.replacement
|
||||||
if (defaultContext!! && defaultStart!!) "kotlinx.coroutines.experimental.runBlocking" else conversion.replacement
|
if (defaultContext!! && defaultStart!!) replacement += "($defaultAsyncArgument)"
|
||||||
|
|
||||||
val descriptor = holder.manager.createProblemDescriptor(
|
val descriptor = holder.manager.createProblemDescriptor(
|
||||||
expression,
|
expression,
|
||||||
expression.firstCalleeExpression()!!.textRange.shiftRight(-expression.startOffset),
|
expression.firstCalleeExpression()!!.textRange.shiftRight(-expression.startOffset),
|
||||||
@@ -51,13 +52,16 @@ class RedundantAsyncInspection : AbstractCallChainChecker() {
|
|||||||
private val conversionGroups = conversions.group()
|
private val conversionGroups = conversions.group()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
private val conversions = listOf(
|
private val conversions = listOf(
|
||||||
Conversion(
|
Conversion(
|
||||||
"kotlinx.coroutines.experimental.async",
|
"$COROUTINE_PACKAGE.async",
|
||||||
"kotlinx.coroutines.experimental.Deferred.await",
|
"$COROUTINE_PACKAGE.Deferred.await",
|
||||||
"kotlinx.coroutines.experimental.withContext"
|
"$COROUTINE_PACKAGE.withContext"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val defaultAsyncArgument = "$COROUTINE_PACKAGE.DefaultDispatcher"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal const val COROUTINE_PACKAGE = "kotlinx.coroutines.experimental"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
@@ -44,5 +44,5 @@ suspend fun <T> withContext(
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun test() {
|
suspend fun test() {
|
||||||
runBlocking { 42 }
|
withContext(DefaultDispatcher) { 42 }
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -21,7 +21,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -30,7 +30,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
+3
-3
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
+3
-3
@@ -8,7 +8,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -20,7 +20,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -29,7 +29,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
+3
-3
@@ -9,7 +9,7 @@ interface Deferred<T> {
|
|||||||
|
|
||||||
interface CoroutineContext
|
interface CoroutineContext
|
||||||
|
|
||||||
object DefaultContext : CoroutineContext
|
object DefaultDispatcher : CoroutineContext
|
||||||
|
|
||||||
enum class CoroutineStart {
|
enum class CoroutineStart {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
@@ -21,7 +21,7 @@ enum class CoroutineStart {
|
|||||||
interface Job
|
interface Job
|
||||||
|
|
||||||
fun <T> async(
|
fun <T> async(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
start: CoroutineStart = CoroutineStart.DEFAULT,
|
start: CoroutineStart = CoroutineStart.DEFAULT,
|
||||||
parent: Job? = null,
|
parent: Job? = null,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
@@ -30,7 +30,7 @@ fun <T> async(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T> runBlocking(
|
fun <T> runBlocking(
|
||||||
context: CoroutineContext = DefaultContext,
|
context: CoroutineContext = DefaultDispatcher,
|
||||||
f: suspend () -> T
|
f: suspend () -> T
|
||||||
) {
|
) {
|
||||||
TODO()
|
TODO()
|
||||||
|
|||||||
Reference in New Issue
Block a user