JVM_IR: Maintain annotations in SAM conversion.
Copy method and parameter annotations to the generated SAM implementation method.
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
// WITH_RUNTIME
|
||||
// FILE: Test.java
|
||||
|
||||
class Test {
|
||||
public static Class<?> apply(Runnable x) {
|
||||
return x.getClass();
|
||||
}
|
||||
|
||||
public static interface ABC {
|
||||
void apply(String x1, String x2);
|
||||
}
|
||||
|
||||
public static Class<?> applyABC(ABC x) {
|
||||
return x.getClass();
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
import java.lang.reflect.Method
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class Ann(val x: String)
|
||||
|
||||
fun testMethodNoAnnotations(method: Method, name: String) {
|
||||
assertEquals(0, method.getDeclaredAnnotations().size, "No method annotations expected `$name`")
|
||||
for ((index, annotations) in method.getParameterAnnotations().withIndex()) {
|
||||
assertEquals(0, annotations.size, "No parameter $index annotations expected `$name`")
|
||||
}
|
||||
}
|
||||
|
||||
fun testClass(clazz: Class<*>, name: String) {
|
||||
val invokes = clazz.getDeclaredMethods().single() { !it.isBridge() }
|
||||
testMethodNoAnnotations(invokes, name)
|
||||
}
|
||||
|
||||
@Ann("OK")
|
||||
fun annotatedABC(@Ann("OK0") x: String, @Ann("OK1") y: String) {}
|
||||
|
||||
@Ann("OK")
|
||||
fun annotatedRunnable() {}
|
||||
|
||||
fun box(): String {
|
||||
testClass(Test.applyABC(::annotatedABC), "1")
|
||||
testClass(Test.apply(::annotatedRunnable), "2")
|
||||
val abcReference = ::annotatedABC
|
||||
testClass(Test.applyABC(abcReference), "3")
|
||||
val runnableReference = ::annotatedRunnable
|
||||
testClass(Test.apply(runnableReference), "4")
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user