| // TARGET_BACKEND: JVM |
| // LAMBDAS: CLASS |
| |
| import java.util.Date |
| |
| fun assertGenericSuper(expected: String, function: Any?) { |
| val clazz = (function as java.lang.Object).getClass()!! |
| val genericSuper = clazz.getGenericInterfaces()[0]!! |
| if ("$genericSuper" != expected) |
| throw AssertionError("Fail, expected: $expected, actual: $genericSuper") |
| } |
| |
| |
| val unitFun = { } |
| val intFun = { 42 } |
| val stringParamFun = { x: String -> } |
| val listFun = { l: List<String> -> l } |
| val mutableListFun = fun (l: MutableList<Double>): MutableList<Int> = null!! |
| val funWithIn = fun (x: Comparable<String>) {} |
| |
| val extensionFun = fun Any.() {} |
| val extensionWithArgFun = fun Long.(x: Any): Date = Date() |
| |
| fun box(): String { |
| assertGenericSuper("kotlin.jvm.functions.Function0<kotlin.Unit>", unitFun) |
| assertGenericSuper("kotlin.jvm.functions.Function0<java.lang.Integer>", intFun) |
| assertGenericSuper("kotlin.jvm.functions.Function1<java.lang.String, kotlin.Unit>", stringParamFun) |
| assertGenericSuper("kotlin.jvm.functions.Function1<java.util.List<? extends java.lang.String>, java.util.List<? extends java.lang.String>>", listFun) |
| assertGenericSuper("kotlin.jvm.functions.Function1<java.util.List<java.lang.Double>, java.util.List<java.lang.Integer>>", mutableListFun) |
| assertGenericSuper("kotlin.jvm.functions.Function1<java.lang.Comparable<? super java.lang.String>, kotlin.Unit>", funWithIn) |
| |
| assertGenericSuper("kotlin.jvm.functions.Function1<java.lang.Object, kotlin.Unit>", extensionFun) |
| assertGenericSuper("kotlin.jvm.functions.Function2<java.lang.Long, java.lang.Object, java.util.Date>", extensionWithArgFun) |
| |
| return "OK" |
| } |