648c1f4599
By ignoring type parameters. Since type parameters in annotations are a very limited feature, their sole use is to be able to specify them as KClass argument: annotation class Foo<T: Any>(val bar: KClass<T>). Since we can encounter type param only as a KClass type argument (and never as a property type), simple approach of ignoring them works fine. In that case, since we simply copy property types to synthetic implementation class, its properties in IR start look like this: annotation class FooImpl(override val bar: KClass<T of Foo>). This IR seems to be not completely correct, since FooImpl.bar type contains T of Foo param, which is out of its scope. However, so far I didn't encounter any problems with this during testing and after MR discussion this approach has been considered possible. #KT-59558 Fixed #KT-59036 Fixed
20 lines
353 B
Kotlin
Vendored
20 lines
353 B
Kotlin
Vendored
// FIR_IDENTICAL
|
|
// WITH_STDLIB
|
|
// SKIP_TXT
|
|
// !LANGUAGE: +InstantiationOfAnnotationClasses
|
|
|
|
import kotlin.reflect.KClass
|
|
|
|
annotation class A
|
|
annotation class B(val int: Int)
|
|
annotation class C(val int: Int = 42)
|
|
|
|
annotation class G<T: Any>(val int: KClass<T>)
|
|
|
|
fun box() {
|
|
val a = A()
|
|
val b = B(4)
|
|
val c = C()
|
|
val foo = G(Int::class)
|
|
}
|