Copy annotation and attributes on class transformation during inline

This commit is contained in:
Mikhael Bogdanov
2017-08-04 15:32:58 +02:00
parent 11ba805181
commit 15f401a473
9 changed files with 110 additions and 6 deletions
@@ -0,0 +1,23 @@
// FILE: 1.kt
//WITH_RUNTIME
package test
annotation class MethodAnnotation
inline fun reproduceIssue(crossinline s: () -> String): String {
val obj = object {
@MethodAnnotation fun annotatedMethod(): String {
return s()
}
}
val annotatedMethod = obj::class.java.declaredMethods.first { it.name == "annotatedMethod" }
if (annotatedMethod.annotations.isEmpty()) return "fail: can't find annotated method"
return obj.annotatedMethod()
}
// FILE: 2.kt
import test.*
fun box(): String {
return reproduceIssue { "OK" }
}
@@ -0,0 +1,24 @@
// FILE: 1.kt
//WITH_RUNTIME
package test
annotation class FieldAnnotation
inline fun reproduceIssue(crossinline s: () -> String): String {
val obj = object {
@field:FieldAnnotation val annotatedField = "O"
fun method(): String {
return annotatedField + s()
}
}
val annotatedMethod = obj::class.java.declaredFields.first { it.name == "annotatedField" }
if (annotatedMethod.annotations.isEmpty()) return "fail: can't find annotated field"
return obj.method()
}
// FILE: 2.kt
import test.*
fun box(): String {
return reproduceIssue { "K" }
}