Restore support for local class literals in annotation arguments

This was broken in c1ab08c8ce where we started to represent KClassValue
as a ClassId of the referenced class + number of times it's been wrapped
into kotlin.Array. Local classes do not have a sane ClassId, so in this
change we restore the old behavior by representing KClassValue with a
sealed class value instead

 #KT-29891 Fixed
This commit is contained in:
Alexander Udalov
2019-02-19 19:31:44 +01:00
parent f733bda912
commit 3f1533c35b
14 changed files with 132 additions and 35 deletions
@@ -1,14 +1,25 @@
// CLASS_NAME_SUFFIX: A$foo$Local
import kotlin.reflect.KClass
class A {
annotation class Ann(val info: String)
fun foo() {
@Ann("class") class Local {
@Ann("fun") fun foo(): Local = this
@field:Ann("val") val x = foo()
annotation class Bnn(val klass: KClass<*>)
@Ann("inner") inner class Inner
fun foo() {
@Ann("class")
class Local {
@Ann("fun")
fun foo(): Local = this
@field:Ann("val")
@Bnn(Local::class)
val x = foo()
@Ann("inner")
@Bnn(Array<Array<out Local>>::class)
inner class Inner
}
}
}
@@ -1,9 +1,9 @@
@A.Ann(info = "class") local final class `A$foo$Local`
public constructor `A$foo$Local`()
@field:A.Ann(info = "val") public final val x: `A$foo$Local`
@A.Bnn(klass = A$foo$Local::class) @field:A.Ann(info = "val") public final val x: `A$foo$Local`
@A.Ann(info = "fun") public final fun foo(): `A$foo$Local`
@A.Ann(info = "inner") local final inner class Inner {
@A.Ann(info = "inner") @A.Bnn(klass = kotlin.Array<kotlin.Array<A$foo$Local>>::class) local final inner class Inner {
public constructor Inner()
}