FIR: report ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT
This commit is contained in:
+5
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.KtNodeTypes.VALUE_PARAMETER
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind.ANNOTATION_CLASS
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkConstantArguments
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
@@ -38,6 +39,10 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() {
|
||||
} else if (source.hasVar()) {
|
||||
reporter.reportOn(source, FirErrors.VAR_ANNOTATION_PARAMETER, context)
|
||||
}
|
||||
val defaultValue = parameter.defaultValue
|
||||
if (defaultValue != null && checkConstantArguments(defaultValue, context.session) != null) {
|
||||
reporter.reportOn(defaultValue.source, FirErrors.ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT, context)
|
||||
}
|
||||
|
||||
val typeRef = parameter.returnTypeRef
|
||||
val coneType = typeRef.coneTypeSafe<ConeLookupTagBasedType>()
|
||||
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
const val iConst = 42
|
||||
val iVal = 42
|
||||
fun iFun() = 42
|
||||
|
||||
annotation class Ann(val x: Int)
|
||||
annotation class Test1(val x: Int = 42)
|
||||
annotation class Test2(val x: Int = iConst)
|
||||
annotation class Test3(val x: Int = 1 + iConst + 1)
|
||||
annotation class Test4(val x: Int = iVal)
|
||||
annotation class Test5(val x: Int = 1 + iVal + 1)
|
||||
annotation class Test6(val x: Int = iFun())
|
||||
annotation class Test7(val x: Int = 1 + iFun() + 1)
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
const val iConst = 42
|
||||
val iVal = 42
|
||||
fun iFun() = 42
|
||||
|
||||
Vendored
-8
@@ -1,8 +0,0 @@
|
||||
annotation class A
|
||||
annotation class A1(val x: Int)
|
||||
|
||||
annotation class B(
|
||||
val a: A = A(),
|
||||
val x: Int = A1(42).x,
|
||||
val aa: Array<A> = arrayOf(A())
|
||||
)
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
annotation class A
|
||||
annotation class A1(val x: Int)
|
||||
|
||||
|
||||
Vendored
-22
@@ -1,22 +0,0 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
const 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 = foo(),
|
||||
val p2: Int = nonConst,
|
||||
val p3: KClass<*> = nonConstKClass
|
||||
)
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
const val CONST = 1
|
||||
|
||||
Reference in New Issue
Block a user