Prohibit not-Unit suspend functions
#KT-13560 Fixed
This commit is contained in:
@@ -80,6 +80,10 @@ object SuspendModifierChecker : SimpleDeclarationChecker {
|
||||
if (continuationParameterType?.arguments?.firstOrNull()?.isStarProjection == true) {
|
||||
report("Continuation<*> is prohibited as a last parameter of suspend function")
|
||||
}
|
||||
|
||||
if (functionDescriptor.returnType?.isUnit() != true) {
|
||||
report("return type of suspension function must be a kotlin.Unit, but ${functionDescriptor.returnType} was found")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,4 +38,7 @@ class Controller {
|
||||
suspend fun String.memberExtension(x: Continuation<Int>) {
|
||||
|
||||
}
|
||||
|
||||
suspend fun returnsUnit(x: Continuation<Int>) = Unit
|
||||
<!INAPPLICABLE_MODIFIER!>suspend<!> fun returnsNotUnit(x: Continuation<Int>) = 1
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ public suspend fun kotlin.String.wrongExtension(/*0*/ x: kotlin.coroutines.Conti
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final inline suspend fun inlineFun(/*0*/ x: kotlin.coroutines.Continuation<kotlin.Int>): kotlin.Unit
|
||||
public final suspend fun noParams(): kotlin.Unit
|
||||
public final suspend fun returnsNotUnit(/*0*/ x: kotlin.coroutines.Continuation<kotlin.Int>): kotlin.Int
|
||||
public final suspend fun returnsUnit(/*0*/ x: kotlin.coroutines.Continuation<kotlin.Int>): kotlin.Unit
|
||||
public final suspend fun starProjection(/*0*/ x: kotlin.coroutines.Continuation<*>): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
public final suspend fun valid(/*0*/ x: kotlin.coroutines.Continuation<kotlin.Int>): kotlin.Unit
|
||||
|
||||
@@ -38,4 +38,6 @@ class Controller {
|
||||
<info descr="null">suspend</info> fun String.memberExtension(<warning descr="[UNUSED_PARAMETER] Parameter 'x' is never used">x</warning>: Continuation<Int>) {
|
||||
|
||||
}
|
||||
|
||||
<error descr="[INAPPLICABLE_MODIFIER] 'suspend' modifier is inapplicable. The reason is that return type of suspension function must be a kotlin.Unit, but Int was found"><info descr="null">suspend</info></error> fun returnsNotUnit(<warning descr="[UNUSED_PARAMETER] Parameter 'x' is never used">x</warning>: Continuation<Int>) = 1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user