Support suspend functions as superinterfaces
Forbid mixing suspend and non-suspend functional supertypes. Since JVM BE generates suspend functional types as non-suspend ones with SuspendFunction marker interface, there is not way to distinguish non-suspend functional type from suspend one if they are mixed. #KT-18707 Fixed
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JS, JS_IR, JVM
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
var res = "FAIL"
|
||||
|
||||
class C: suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
res = "OK"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val o: suspend () -> Unit = object : suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
res = "OK"
|
||||
}
|
||||
}
|
||||
o.startCoroutine(Continuation(EmptyCoroutineContext) {
|
||||
it.getOrThrow()
|
||||
})
|
||||
if (res != "OK") return "FAIL 1: $res"
|
||||
|
||||
res = "FAIL 2"
|
||||
C().startCoroutine(Continuation(EmptyCoroutineContext) {
|
||||
it.getOrThrow()
|
||||
})
|
||||
return res
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
class C: KSuspendFunction0<Unit>, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: KSuspendFunction0<Unit>, () -> Unit {
|
||||
}
|
||||
|
||||
object O: KSuspendFunction0<Unit>, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: CSuper(), KSuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: CSuper(), KSuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: KSuspendFunction0<Unit>
|
||||
|
||||
class C1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), KSuspendFunction0<Unit><!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), KSuspendFunction0<Unit><!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: KSuspendFunction0<Unit>
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: KSuspendFunction0<Unit>, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: KSuspendFunction0<Unit>, FISuper {
|
||||
}
|
||||
|
||||
object O: KSuspendFunction0<Unit>, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, FISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: KSuspendFunction0<Unit>, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: KSuspendFunction0<Unit>, ISuper {
|
||||
}
|
||||
|
||||
object O: KSuspendFunction0<Unit>, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: KSuspendFunction0<Unit>
|
||||
|
||||
class C1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I1: SISuper, () -> Unit {
|
||||
}
|
||||
|
||||
object O1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I2: SISuper, ISuper {
|
||||
}
|
||||
|
||||
object O2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, ISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: KSuspendFunction0<Unit>
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
}
|
||||
|
||||
object O2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// FIR_IDENTICAL
|
||||
// DIAGNOSTICS: -ABSTRACT_MEMBER_NOT_IMPLEMENTED
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
class C: KSuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface I: KSuspendFunction0<Unit> {
|
||||
}
|
||||
|
||||
object O: KSuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
class C: suspend () -> Unit, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: suspend () -> Unit, () -> Unit {
|
||||
}
|
||||
|
||||
interface I: suspend () -> Unit, () -> Unit {
|
||||
}
|
||||
|
||||
object O: suspend () -> Unit, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: CSuper(), suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: CSuper(), suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: suspend () -> Unit
|
||||
|
||||
class C1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), suspend () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), suspend () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: suspend () -> Unit
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: suspend () -> Unit, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: suspend () -> Unit, FISuper {
|
||||
}
|
||||
|
||||
interface I: suspend () -> Unit, FISuper {
|
||||
}
|
||||
|
||||
object O: suspend () -> Unit, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface SFISuper: suspend () -> Unit
|
||||
|
||||
class C1: SFISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: SFISuper, () -> Unit {
|
||||
}
|
||||
|
||||
interface I1: SFISuper, () -> Unit {
|
||||
}
|
||||
|
||||
object O1: SFISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: SFISuper, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: SFISuper, FISuper {
|
||||
}
|
||||
|
||||
interface I2: SFISuper, FISuper {
|
||||
}
|
||||
|
||||
object O2: SFISuper, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, FISuper<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, FISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface SFISuper: suspend () -> Unit
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
}
|
||||
|
||||
interface I2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
}
|
||||
|
||||
object O2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: suspend () -> Unit, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: suspend () -> Unit, ISuper {
|
||||
}
|
||||
|
||||
interface I: suspend () -> Unit, ISuper {
|
||||
}
|
||||
|
||||
object O: suspend () -> Unit, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: suspend () -> Unit
|
||||
|
||||
class C1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: SISuper, () -> Unit {
|
||||
}
|
||||
|
||||
interface I1: SISuper, () -> Unit {
|
||||
}
|
||||
|
||||
object O1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: SISuper, ISuper {
|
||||
}
|
||||
|
||||
interface I2: SISuper, ISuper {
|
||||
}
|
||||
|
||||
object O2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, ISuper<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, ISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: suspend () -> Unit
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
}
|
||||
|
||||
interface I2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
}
|
||||
|
||||
object O2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// FIR_IDENTICAL
|
||||
|
||||
class C: suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: suspend () -> Unit {
|
||||
}
|
||||
|
||||
interface I: suspend () -> Unit {
|
||||
}
|
||||
|
||||
object O: suspend () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
import kotlin.coroutines.*
|
||||
|
||||
class C: SuspendFunction0<Unit>, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: SuspendFunction0<Unit>, () -> Unit {
|
||||
}
|
||||
|
||||
interface I: SuspendFunction0<Unit>, () -> Unit {
|
||||
}
|
||||
|
||||
object O: SuspendFunction0<Unit>, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
import kotlin.coroutines.*
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: CSuper(), SuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: CSuper(), SuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: SCSuper(), () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), SuspendFunction0<Unit><!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>CSuper(), SuspendFunction0<Unit><!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SCSuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SCSuper(), () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: SuspendFunction0<Unit>, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: SuspendFunction0<Unit>, FISuper {
|
||||
}
|
||||
|
||||
interface I: SuspendFunction0<Unit>, FISuper {
|
||||
}
|
||||
|
||||
object O: SuspendFunction0<Unit>, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface SFISuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: SFISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: SFISuper, () -> Unit {
|
||||
}
|
||||
|
||||
interface I1: SFISuper, () -> Unit {
|
||||
}
|
||||
|
||||
object O1: SFISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: SFISuper, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: SFISuper, FISuper {
|
||||
}
|
||||
|
||||
interface I2: SFISuper, FISuper {
|
||||
}
|
||||
|
||||
object O2: SFISuper, FISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, FISuper<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, FISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface SFISuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
}
|
||||
|
||||
interface I2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
}
|
||||
|
||||
object O2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SFISuper, FISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: SuspendFunction0<Unit>, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: SuspendFunction0<Unit>, ISuper {
|
||||
}
|
||||
|
||||
interface I: SuspendFunction0<Unit>, ISuper {
|
||||
}
|
||||
|
||||
object O: SuspendFunction0<Unit>, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: SISuper, () -> Unit {
|
||||
}
|
||||
|
||||
interface I1: SISuper, () -> Unit {
|
||||
}
|
||||
|
||||
object O1: SISuper, () -> Unit {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: SISuper, ISuper {
|
||||
}
|
||||
|
||||
interface I2: SISuper, ISuper {
|
||||
}
|
||||
|
||||
object O2: SISuper, ISuper {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, ISuper<!> {
|
||||
}
|
||||
|
||||
interface I: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, ISuper<!> {
|
||||
}
|
||||
|
||||
object O: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
interface SISuper: SuspendFunction0<Unit>
|
||||
|
||||
class C1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
interface I1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
}
|
||||
|
||||
object O1: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
class C2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
}
|
||||
|
||||
interface I2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
}
|
||||
|
||||
object O2: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SISuper, ISuper<!> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
compiler/testData/diagnostics/tests/coroutines/suspendFunctionAsSupertype/suspendFunctionN/simple.kt
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// FIR_IDENTICAL
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
class C: SuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
|
||||
fun interface FI: SuspendFunction0<Unit> {
|
||||
}
|
||||
|
||||
interface I: SuspendFunction0<Unit> {
|
||||
}
|
||||
|
||||
object O: SuspendFunction0<Unit> {
|
||||
override suspend fun invoke() {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user