// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FULL_JDK // SKIP_JDK6 // FILE: test.kt // Test that SAM wrappers with type parameters are cached properly. class A { fun stringPredicate(string: String, p: (String) -> Boolean): Boolean { return java.util.function.Predicate(p).test(string) } fun intPredicate(int: Int, p: (Int) -> Boolean): Boolean { return java.util.function.Predicate(p).test(int) } } fun wrapStringPredicate(p: (String) -> Boolean): java.util.function.Predicate = java.util.function.Predicate(p) fun wrapIntPredicate(p: (Int) -> Boolean): java.util.function.Predicate = java.util.function.Predicate(p) fun box(): String { if (!A().stringPredicate("OK") { it == "OK"}) return "Fail 1" if (!A().intPredicate(0) { it == 0 }) return "Fail 2" try { java.lang.Class.forName("TestKt\$sam\$java_util_function_Predicate$0") } catch (e: Throwable) { return "Fail 3: sam wrapper not found" } val stringPredicateWrapperClass = wrapStringPredicate { true }::class.java val intPredicateWrapperClass = wrapIntPredicate { false }::class.java if (stringPredicateWrapperClass !== intPredicateWrapperClass) return "Fail 4: sam wrapper not cached" return "OK" }