Prohibit non-constant default values for annotation parameter

#KT-7449 Fixed
This commit is contained in:
Denis Zharkov
2015-05-07 15:04:46 +03:00
parent 585a437b2e
commit 93861e16c8
6 changed files with 61 additions and 0 deletions
@@ -0,0 +1,22 @@
import kotlin.reflect.KClass
val CONST = 1
fun foo() = 1
val nonConst = foo()
annotation class ValidAnn(
val p1: Int = 1 + CONST,
val p2: String = "",
val p3: KClass<*> = String::class,
val p4: IntArray = intArrayOf(1, 2, 3),
val p5: Array<String> = arrayOf("abc"),
val p6: Array<KClass<*>> = arrayOf(Int::class)
)
val nonConstKClass = String::class
annotation class InvalidAnn(
val p1: Int = <!ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT!>foo()<!>,
val p2: Int = <!ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT!>nonConst<!>,
val p3: KClass<*> = <!ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT!>nonConstKClass<!>
)
@@ -0,0 +1,29 @@
package
internal val CONST: kotlin.Int = 1
internal val nonConst: kotlin.Int
internal val nonConstKClass: kotlin.reflect.KClass<kotlin.String>
internal fun foo(): kotlin.Int
internal final annotation class InvalidAnn : kotlin.Annotation {
public constructor InvalidAnn(/*0*/ p1: kotlin.Int = ..., /*1*/ p2: kotlin.Int = ..., /*2*/ p3: kotlin.reflect.KClass<*> = ...)
internal final val p1: kotlin.Int
internal final val p2: kotlin.Int
internal final val p3: kotlin.reflect.KClass<*>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final annotation class ValidAnn : kotlin.Annotation {
public constructor ValidAnn(/*0*/ p1: kotlin.Int = ..., /*1*/ p2: kotlin.String = ..., /*2*/ p3: kotlin.reflect.KClass<*> = ..., /*3*/ p4: kotlin.IntArray = ..., /*4*/ p5: kotlin.Array<kotlin.String> = ..., /*5*/ p6: kotlin.Array<kotlin.reflect.KClass<*>> = ...)
internal final val p1: kotlin.Int
internal final val p2: kotlin.String
internal final val p3: kotlin.reflect.KClass<*>
internal final val p4: kotlin.IntArray
internal final val p5: kotlin.Array<kotlin.String>
internal final val p6: kotlin.Array<kotlin.reflect.KClass<*>>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}