Files
kotlin-fork/compiler/testData/codegen/box/reflection/genericSignature/suspendFunctionLiteralGenericSignature.kt
T
Ivan Kylchik c7435ba760 Replace all occurrences of WITH_RUNTIME with WITH_STDLIB
We are going to deprecate `WITH_RUNTIME` directive. The main reason
behind this change is that `WITH_STDLIB` directive better describes
its meaning, specifically it will add kotlin stdlib to test's classpath.
2021-11-17 15:26:38 +03:00

73 lines
2.8 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// WITH_STDLIB
import java.util.Date
fun assertEquals(expected: String, actual: Any) {
if ("$actual" != expected)
throw AssertionError("Fail, expected: $expected, actual: $actual")
}
fun assertGenericSuper(expected: String, function: Any?) {
val clazz = (function as java.lang.Object).getClass()!!
val genericSuper = clazz.getGenericInterfaces()[0]!!
assertEquals(expected, genericSuper)
}
val unitFun = suspend { }
val intFun = suspend { 42 }
fun assertStringParamFun(lambda: suspend (String) -> Unit) {
assertEquals(
"kotlin.jvm.functions.Function2<java.lang.String, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun assertListFun(lambda: suspend (List<String>) -> Unit) {
assertEquals(
"kotlin.jvm.functions.Function2<java.util.List<? extends java.lang.String>, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun assertMutableListFun(lambda: suspend (MutableList<Double>) -> MutableList<Int>) {
assertEquals(
"kotlin.jvm.functions.Function2<java.util.List<java.lang.Double>, kotlin.coroutines.Continuation<? super java.util.List<java.lang.Integer>>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun assertFunWithIn(lambda: suspend (Comparable<String>) -> Unit) {
assertEquals(
"kotlin.jvm.functions.Function2<java.lang.Comparable<? super java.lang.String>, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun assertExtensionFun(lambda: suspend Any.() -> Unit) {
assertEquals(
"kotlin.jvm.functions.Function2<java.lang.Object, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun assertExtensionWithArgFun(lambda: suspend Long.(x: Any) -> Date) {
assertEquals(
"kotlin.jvm.functions.Function3<java.lang.Long, java.lang.Object, kotlin.coroutines.Continuation<? super java.util.Date>, java.lang.Object>",
lambda.javaClass.genericInterfaces.single()
)
}
fun box(): String {
assertGenericSuper("kotlin.jvm.functions.Function1<kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>", unitFun)
assertGenericSuper("kotlin.jvm.functions.Function1<kotlin.coroutines.Continuation<? super java.lang.Integer>, java.lang.Object>", intFun)
assertStringParamFun { x: String -> }
assertListFun { l: List<String> -> l }
assertMutableListFun { l -> null!! }
assertFunWithIn { x -> }
assertExtensionFun { }
assertExtensionWithArgFun { x -> Date() }
return "OK"
}