import java.util.Date fun assertGenericSuper(expected: String, function: Any?) { val clazz = (function as java.lang.Object).getClass()!! val genericSuper = clazz.getGenericSuperclass()!! 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("jet.FunctionImpl0", unitFun) assertGenericSuper("jet.FunctionImpl0", intFun) assertGenericSuper("jet.FunctionImpl1", stringParamFun) assertGenericSuper("jet.FunctionImpl1, java.util.List>", listFun) assertGenericSuper("jet.FunctionImpl1, java.util.List>", mutableListFun) assertGenericSuper("jet.FunctionImpl1, jet.Unit>", funWithIn) assertGenericSuper("jet.ExtensionFunctionImpl0", extensionFun) assertGenericSuper("jet.ExtensionFunctionImpl1", extensionWithArgFun) return "OK" }