mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-11 00:21:29 +00:00
53 lines
1.7 KiB
Kotlin
Vendored
53 lines
1.7 KiB
Kotlin
Vendored
// IGNORE_BACKEND_FIR: JVM_IR
|
|
// SKIP_JDK6
|
|
// TARGET_BACKEND: JVM
|
|
// WITH_RUNTIME
|
|
// 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"
|
|
}
|