| // SKIP_JDK6 |
| // TARGET_BACKEND: JVM |
| // WITH_STDLIB |
| // FULL_JDK |
| |
| // FILE: Java.java |
| |
| import java.lang.reflect.Method; |
| import java.util.function.Predicate; |
| import java.util.*; |
| |
| public final class Java { |
| public static Method getTest(Predicate<Object> predicate) throws NoSuchMethodException { |
| return predicate.getClass().getMethod("test", Object.class); |
| } |
| |
| public static Method getFoo(ComplexPredicate<Long> predicate) throws NoSuchMethodException { |
| return predicate.getClass().getMethod("foo", Number.class, List.class, Map.class); |
| } |
| } |
| |
| // FILE: ComplexPredicate.java |
| |
| import java.util.*; |
| |
| public interface ComplexPredicate<T extends Number> { |
| boolean foo(T p0, List<T> p1, Map<T, ? extends Set<T>> p2); |
| } |
| |
| // FILE: K.kt |
| |
| import java.lang.reflect.Method |
| import java.util.* |
| import kotlin.test.assertEquals |
| |
| fun check(title: String, expected: String, method: Method) { |
| assertEquals(expected, method.parameterTypes.contentToString(), "Fail parameterTypes of $title") |
| assertEquals(expected, method.genericParameterTypes.contentToString(), "Fail genericParameterTypes of $title") |
| } |
| |
| private fun bar(p0: Long, p1: List<Long>, p2: Map<Long, Set<Long>>) = true |
| |
| fun box(): String { |
| check("SAM-implementing lambda 1", "[class java.lang.Object]", Java.getTest { Objects.nonNull(it) }) |
| check("SAM-wrapped function reference 1", "[class java.lang.Object]", Java.getTest(Objects::nonNull)) |
| |
| check("SAM-implementing lambda 2", "[class java.lang.Number, interface java.util.List, interface java.util.Map]", Java.getFoo { p0, p1, p2 -> bar(p0, p1, p2) }) |
| check("SAM-wrapped function reference 2", "[class java.lang.Number, interface java.util.List, interface java.util.Map]", Java.getFoo(::bar)) |
| |
| return "OK" |
| } |