[FIR] Properly check spread constant argument
This commit is contained in:
+5
-3
@@ -80,9 +80,11 @@ object FirAnnotationArgumentChecker : FirAnnotationCallChecker() {
|
||||
if (usedNonConst) return FirErrors.NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION
|
||||
}
|
||||
is FirVarargArgumentsExpression -> {
|
||||
for (arg in expression.arguments)
|
||||
checkAnnotationArgumentWithSubElements(arg, fqName, session, reporter, context)
|
||||
?.let { reporter.reportOn(arg.source, it, context) }
|
||||
for (arg in expression.arguments) {
|
||||
val unwrappedArg = if (arg is FirSpreadArgumentExpression) arg.expression else arg
|
||||
checkAnnotationArgumentWithSubElements(unwrappedArg, fqName, session, reporter, context)
|
||||
?.let { reporter.reportOn(unwrappedArg.source, it, context) }
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
val error = when (checkConstantArguments(expression, session)) {
|
||||
|
||||
+1
-1
@@ -22,5 +22,5 @@ fun foo4() {}
|
||||
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>value = *nonConstArray<!>)
|
||||
fun bar1() {}
|
||||
|
||||
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>*nonConstArray<!>)
|
||||
@Anno(*<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>nonConstArray<!>)
|
||||
fun bar2() {}
|
||||
|
||||
+1
-1
@@ -22,5 +22,5 @@ fun foo4() {}
|
||||
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>value = *nonConstArray<!>)
|
||||
fun bar1() {}
|
||||
|
||||
@Anno(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>*nonConstArray<!>)
|
||||
@Anno(*<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>nonConstArray<!>)
|
||||
fun bar2() {}
|
||||
|
||||
+4
-4
@@ -6,10 +6,10 @@ annotation class Ann(vararg val i: Int)
|
||||
@Ann(i2)
|
||||
@Ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i3<!>)
|
||||
@Ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i<!>, i2, <!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i3<!>)
|
||||
@Ann(*intArrayOf(i))
|
||||
@Ann(*<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>intArrayOf(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i<!>)<!>)
|
||||
@Ann(*intArrayOf(i2))
|
||||
@Ann(*intArrayOf(i3))
|
||||
@Ann(*intArrayOf(i, i2, i3))
|
||||
@Ann(*<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>intArrayOf(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i3<!>)<!>)
|
||||
@Ann(*<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>intArrayOf(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i<!>, i2, <!ANNOTATION_ARGUMENT_MUST_BE_CONST!>i3<!>)<!>)
|
||||
class Test
|
||||
|
||||
var i = 1
|
||||
@@ -22,6 +22,6 @@ fun foo(): Int = 1
|
||||
@Repeatable
|
||||
annotation class AnnAnn(vararg val i: Ann)
|
||||
@AnnAnn(*arrayOf(Ann(1)))
|
||||
@AnnAnn(*arrayOf(iAnn))
|
||||
@AnnAnn(*<!NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION!>arrayOf(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>iAnn<!>)<!>)
|
||||
class TestAnn
|
||||
val iAnn = Ann(1)
|
||||
|
||||
Reference in New Issue
Block a user