Prohibit not-Unit suspend functions

#KT-13560 Fixed
This commit is contained in:
Denis Zharkov
2016-09-29 15:55:28 +03:00
parent 96186c6217
commit d4418d5686
4 changed files with 11 additions and 0 deletions
@@ -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
+2
View File
@@ -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
}