Files
kotlin-fork/compiler/testData/codegen/box/reflection/genericSignature/functionLiteralGenericSignature.kt
T
Alexander Udalov cd9209a7ee JVM: enable -Xlambdas=class in some codegen tests
Most of these tests check the specific structure of lambdas when they
are generated as classes, and they start to fail once invokedynamic
lambdas are enabled by default.
2023-04-28 21:34:19 +00:00

37 lines
1.6 KiB
Kotlin
Vendored

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