| // TARGET_BACKEND: JVM | |
| // LAMBDAS: INDY | |
| // CHECK_BYTECODE_LISTING | |
| // WITH_STDLIB | |
| class C { | |
| fun inTrailing( | |
| x: String, | |
| @IntroducedAt("1") y: Int = 1, | |
| @IntroducedAt("2") z: Boolean = true, | |
| block: (String) -> String = { x.uppercase() } | |
| ) = "$x/$y/$z/${block("")}" | |
| fun inArgument( | |
| x: String, | |
| @IntroducedAt("1") y: Int = 1, | |
| @IntroducedAt("2") z: (Int) -> Int = { y + 1 }, | |
| block: (String) -> String | |
| ) = "$x/$y/${z(0)}/${block("")}" | |
| } | |
| fun test1() : String { | |
| val c = C() | |
| val f: (String) -> String = String::uppercase | |
| val m1 = C::class.java.getMethod("inTrailing", String::class.java, kotlin.jvm.functions.Function1::class.java) | |
| val m2 = C::class.java.getMethod("inTrailing", String::class.java, Int::class.java, kotlin.jvm.functions.Function1::class.java) | |
| val v1 = m1.invoke(c, "hello", f) as String | |
| val v2 = m2.invoke(c, "hello", 1, f) as String | |
| val v3 = c.inTrailing("hello", 1, true, f) | |
| return if ((v1 == v3) && (v2 == v3)) "O" else "Err1: $v1 $v2 $v3 " | |
| } | |
| fun test2() : String { | |
| val c = C() | |
| val f: (String) -> String = String::uppercase | |
| val z: (Int) -> Int = { 2 } | |
| val m1 = C::class.java.getMethod("inArgument", String::class.java, kotlin.jvm.functions.Function1::class.java) | |
| val m2 = C::class.java.getMethod("inArgument", String::class.java, Int::class.java, kotlin.jvm.functions.Function1::class.java) | |
| val v1 = m1.invoke(c, "hello" , f) as String | |
| val v2 = m2.invoke(c, "hello", 1, f) as String | |
| val v3 = c.inArgument("hello", 1, z, f) | |
| return if ((v1 == v3) && (v2 == v3)) "K" else " Err2: $v1 $v2 $v3" | |
| } | |
| fun box() = test1() + test2() |