// IGNORE_BACKEND: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FILE: example/Hello.java package example; @FunctionalInterface public interface Hello { void invoke(A a); } // FILE: example/SomeJavaClass.java package example; public class SomeJavaClass { public void someFunction(Hello hello) { ((Hello)hello).invoke("OK"); } public void plus(Hello hello) { ((Hello)hello).invoke("OK"); } public void get(Hello hello) { ((Hello)hello).invoke("OK"); } } // FILE: main.kt import example.SomeJavaClass fun box(): String { val a: SomeJavaClass = SomeJavaClass() var result = "fail" // a::someFunction parameter has type of Nothing // while it's completely safe to pass a lambda for a SAM // since Hello is effectively contravariant by its parameter a.someFunction { result = it } if (result != "OK") return "fail 1: $result" result = "fail" a + { result = it } if (result != "OK") return "fail 2: $result" result = "fail" a[{ result = it }] if (result != "OK") return "fail 3: $result" return "OK" }