| // 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" | |
| } |