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) : Unit -> } val listFun = { (l: List) : List -> l } val mutableListFun = { (l: MutableList) : MutableList -> null!! } val funWithIn = { (x: Comparable) : Unit -> } val extensionFun = { Any.() : Unit -> } val extensionWithArgFun = { Long.(x: Any) : Date -> Date() } fun box(): String { assertGenericSuper("kotlin.Function0", unitFun) assertGenericSuper("kotlin.Function0", intFun) assertGenericSuper("kotlin.Function1", stringParamFun) assertGenericSuper("kotlin.Function1, java.util.List>", listFun) assertGenericSuper("kotlin.Function1, java.util.List>", mutableListFun) assertGenericSuper("kotlin.Function1, kotlin.Unit>", funWithIn) assertGenericSuper("kotlin.ExtensionFunction0", extensionFun) assertGenericSuper("kotlin.ExtensionFunction1", extensionWithArgFun) return "OK" }