Fix target for annotations/metadata on open suspend functions

Get rid of rewriting of vars in FunctionCodegen::generateMethod,
just extracted generateMethodBody instead

 #KT-19814 Fixed
This commit is contained in:
Denis Zharkov
2017-08-30 15:03:35 +03:00
parent 742fecf69c
commit 80a90572d6
7 changed files with 183 additions and 47 deletions
@@ -0,0 +1,28 @@
// WITH_REFLECT
// IGNORE_BACKEND: JS, NATIVE
import kotlin.reflect.full.declaredMemberFunctions
import kotlin.test.assertEquals
import kotlin.test.assertTrue
annotation class Anno
open class Aaa {
@Anno
suspend open fun aaa() {}
}
class Bbb {
@Anno
suspend fun bbb() {}
}
fun box(): String {
val bbb = Bbb::class.declaredMemberFunctions.first { it.name == "bbb" }.annotations
assertEquals(1, bbb.size)
assertTrue(bbb.single() is Anno)
val aaa = Aaa::class.declaredMemberFunctions.first { it.name == "aaa" }.annotations
assertEquals(1, aaa.size)
assertTrue(aaa.single() is Anno)
return "OK"
}
@@ -0,0 +1,22 @@
// WITH_REFLECT
// IGNORE_BACKEND: JS, NATIVE
import kotlin.reflect.full.declaredMemberFunctions
import kotlin.reflect.jvm.javaMethod
import kotlin.test.assertEquals
open class Aaa {
suspend open fun aaa() {}
}
class Bbb {
suspend fun bbb() {}
}
fun box(): String {
val bbb = Bbb::class.declaredMemberFunctions.first { it.name == "bbb" }.javaMethod
assertEquals("bbb", bbb!!.name)
val aaa = Aaa::class.declaredMemberFunctions.first { it.name == "aaa" }.javaMethod
assertEquals("aaa", aaa!!.name)
return "OK"
}