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:
Ilmir Usmanov
2021-04-26 16:16:25 +02:00
parent 37ccd82b6c
commit dc2485ae71
44 changed files with 1439 additions and 2 deletions
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}
@@ -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() {
}
}