| // !LANGUAGE: +NewInference +FunctionalInterfaceConversion +SamConversionPerArgument +SamConversionForKotlinFunctions |
| |
| // MODULE: lib |
| // FILE: A.kt |
| |
| fun interface KRunnable { |
| fun invoke(): String |
| } |
| |
| fun inA(k: KRunnable): String = k.invoke() |
| |
| // MODULE: main(lib) |
| // FILE: B.kt |
| |
| fun inB(k: KRunnable): String = k.invoke() |
| |
| fun box(): String { |
| val first = inA(KRunnable { "O" }) + inB(KRunnable { "K" }) |
| if (first != "OK") return "fail1: $first" |
| |
| val second = inA { "O" } + inB { "K" } |
| if (second != "OK") return "fail2: $second" |
| |
| val f1: () -> String = { "O" } |
| val f2: () -> String = { "K" } |
| |
| val third = inA(f1) + inB(f2) |
| if (third != "OK") return "fail3: $third" |
| |
| return "OK" |
| } |