diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/DeferredResultUnusedInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/DeferredResultUnusedInspection.kt index 6ae65fd641b..084c04333db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/DeferredResultUnusedInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/DeferredResultUnusedInspection.kt @@ -45,8 +45,8 @@ class DeferredResultUnusedInspection(@JvmField var standardOnly: Boolean = true) companion object { private val shortNames = setOf("async") - private val fqNames: Set = shortNames.mapTo(mutableSetOf()) { FqName("kotlinx.coroutines.experimental.$it") } + private val fqNames: Set = shortNames.mapTo(mutableSetOf()) { FqName("$COROUTINE_PACKAGE.$it") } - private val deferred = FqName("kotlinx.coroutines.experimental.Deferred") + private val deferred = FqName("$COROUTINE_PACKAGE.Deferred") } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/RedundantAsyncInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/RedundantAsyncInspection.kt index 87ea5e995a8..711f3ac6964 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/RedundantAsyncInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/coroutines/RedundantAsyncInspection.kt @@ -35,8 +35,9 @@ class RedundantAsyncInspection : AbstractCallChainChecker() { if (defaultParent != true) return if (defaultContext!! && !defaultStart!!) return - val replacement = - if (defaultContext!! && defaultStart!!) "kotlinx.coroutines.experimental.runBlocking" else conversion.replacement + var replacement = conversion.replacement + if (defaultContext!! && defaultStart!!) replacement += "($defaultAsyncArgument)" + val descriptor = holder.manager.createProblemDescriptor( expression, expression.firstCalleeExpression()!!.textRange.shiftRight(-expression.startOffset), @@ -51,13 +52,16 @@ class RedundantAsyncInspection : AbstractCallChainChecker() { private val conversionGroups = conversions.group() companion object { - private val conversions = listOf( Conversion( - "kotlinx.coroutines.experimental.async", - "kotlinx.coroutines.experimental.Deferred.await", - "kotlinx.coroutines.experimental.withContext" + "$COROUTINE_PACKAGE.async", + "$COROUTINE_PACKAGE.Deferred.await", + "$COROUTINE_PACKAGE.withContext" ) ) + + private val defaultAsyncArgument = "$COROUTINE_PACKAGE.DefaultDispatcher" } -} \ No newline at end of file +} + +internal const val COROUTINE_PACKAGE = "kotlinx.coroutines.experimental" diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt index a0cff42a150..3a2631859c4 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt.after b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt.after index ea3468a8619..9c954a36e59 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt.after +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simple.kt.after @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt index 61372604ada..b2640fe1326 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt.after b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt.after index d6bf79b72bf..8b764961044 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt.after +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/simplest.kt.after @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() @@ -44,5 +44,5 @@ suspend fun withContext( } suspend fun test() { - runBlocking { 42 } + withContext(DefaultDispatcher) { 42 } } \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withParent.kt b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withParent.kt index 7759437c987..6bdcd5913d4 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withParent.kt +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withParent.kt @@ -9,7 +9,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -21,7 +21,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -30,7 +30,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt index fac0fcac8b7..d3329844581 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt.after b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt.after index f9c2bb60107..3419f99fe67 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt.after +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartAndContext.kt.after @@ -8,7 +8,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -20,7 +20,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -29,7 +29,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO() diff --git a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartNoContext.kt b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartNoContext.kt index 5fc9d46d605..d260908f12c 100644 --- a/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartNoContext.kt +++ b/idea/testData/inspectionsLocal/coroutines/redundantAsync/withStartNoContext.kt @@ -9,7 +9,7 @@ interface Deferred { interface CoroutineContext -object DefaultContext : CoroutineContext +object DefaultDispatcher : CoroutineContext enum class CoroutineStart { DEFAULT, @@ -21,7 +21,7 @@ enum class CoroutineStart { interface Job fun async( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, start: CoroutineStart = CoroutineStart.DEFAULT, parent: Job? = null, f: suspend () -> T @@ -30,7 +30,7 @@ fun async( } fun runBlocking( - context: CoroutineContext = DefaultContext, + context: CoroutineContext = DefaultDispatcher, f: suspend () -> T ) { TODO()