Minor: add test to call callable references from Java
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
// IGNORE_BACKEND: JS, JS_IR, NATIVE
|
||||
// COMMON_COROUTINES_TEST
|
||||
// WITH_COROUTINES
|
||||
// WITH_REFLECT
|
||||
|
||||
// FILE: test.kt
|
||||
import kotlin.reflect.KSuspendFunction0
|
||||
|
||||
class Test {
|
||||
suspend fun o() = "O"
|
||||
fun forCall(): KSuspendFunction0<String> {
|
||||
return ::o
|
||||
}
|
||||
|
||||
suspend fun k() = "K"
|
||||
fun forInvoke(): SuspendFunction0<String> {
|
||||
return ::k
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: Checker.java
|
||||
import helpers.*;
|
||||
|
||||
class Checker {
|
||||
public static String check() {
|
||||
Test test = new Test();
|
||||
return ((String) test.forCall().call(new EmptyContinuation())) +
|
||||
((String) test.forInvoke().invoke(new EmptyContinuation()));
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: box.kt
|
||||
fun box() = Checker.check()
|
||||
@@ -12,8 +12,7 @@ inline fun inline() {}
|
||||
class External { external fun external() }
|
||||
operator fun Unit.invoke() {}
|
||||
infix fun Unit.infix(unit: Unit) {}
|
||||
// TODO: support or prohibit references to suspend functions
|
||||
// class Suspend { suspend fun suspend(c: Continuation<Unit>) {} }
|
||||
class Suspend { suspend fun suspend() {} }
|
||||
|
||||
val externalGetter = Unit
|
||||
external get
|
||||
@@ -47,11 +46,11 @@ fun box(): String {
|
||||
assertTrue(Unit::infix.isInfix)
|
||||
assertFalse(Unit::infix.isSuspend)
|
||||
|
||||
// assertFalse(Suspend::suspend.isInline)
|
||||
// assertFalse(Suspend::suspend.isExternal)
|
||||
// assertFalse(Suspend::suspend.isOperator)
|
||||
// assertFalse(Suspend::suspend.isInfix)
|
||||
// assertTrue(Suspend::suspend.isSuspend)
|
||||
assertFalse(Suspend::suspend.isInline)
|
||||
assertFalse(Suspend::suspend.isExternal)
|
||||
assertFalse(Suspend::suspend.isOperator)
|
||||
assertFalse(Suspend::suspend.isInfix)
|
||||
assertTrue(Suspend::suspend.isSuspend)
|
||||
|
||||
assertTrue(::externalGetter.getter.isExternal)
|
||||
assertFalse(::externalGetter.getter.isInline)
|
||||
|
||||
Reference in New Issue
Block a user