From 7b3e661776ebebf307ee55987efeacb8acdb0eda Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Wed, 4 Oct 2023 23:42:45 +0200 Subject: [PATCH] [FIR] Fix Disappeared ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT ^KT-59942 Fixed --- .../fir/analysis/checkers/FirConstChecks.kt | 10 ++++++ ...aultValuesWithConstantsInAnnotation.fir.kt | 23 ------------- .../defaultValuesWithConstantsInAnnotation.kt | 1 + .../nonConstValAsArgument.fir.kt | 34 ------------------- .../nonConstValAsArgument.kt | 1 + 5 files changed, 12 insertions(+), 57 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.fir.kt delete mode 100644 compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.fir.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index b8cacd6ea62..7b005f87144 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -99,6 +99,16 @@ internal fun checkConstantArguments( else -> null } } + expression is FirArrayLiteral -> { + for (exp in expression.arguments) { + checkConstantArguments(exp, session)?.let { + return it + } + } + } + expression is FirThisReceiverExpression -> { + return ConstantArgumentKind.NOT_CONST + } expressionSymbol == null -> { //DO NOTHING } diff --git a/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.fir.kt b/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.fir.kt deleted file mode 100644 index 927ccba16ae..00000000000 --- a/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.fir.kt +++ /dev/null @@ -1,23 +0,0 @@ -const val ONE = 1 - -annotation class Foo( - val a: IntArray = [ONE], - val b: IntArray = [ONE, 2, 3] -) - -val TWO = 2 - -fun getOne() = ONE -fun getTwo() = TWO - -annotation class Bar( - val a: IntArray = [TWO], - val b: IntArray = [1, TWO], - val c: IntArray = [getOne(), getTwo()] -) - -annotation class Baz( - val a: IntArray = [null], - val b: IntArray = [1, null, 2], - val c: IntArray = [this] -) diff --git a/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.kt b/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.kt index 7c8c737943e..d7c25053b77 100644 --- a/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.kt +++ b/compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesWithConstantsInAnnotation.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL const val ONE = 1 annotation class Foo( diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.fir.kt deleted file mode 100644 index 69c4619f00e..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.fir.kt +++ /dev/null @@ -1,34 +0,0 @@ -import kotlin.reflect.KClass - -annotation class Ann( - val a: Array = arrayOf(readOnly), - val b: Array = arrayOf(withGetter), - val c: Array = arrayOf(func()), - val d: IntArray = intArrayOf(ONE, twoWithGetter), - val e: IntArray = intArrayOf(ONE + twoWithGetter), - val f: Array = arrayOf(mutable), - val g: Array = arrayOf(mutableWithGetter), - val h: Array> = arrayOf(WithLateinit.kClass) -) - -const val ONE = 1 - -val twoWithGetter - get() = 2 - -val readOnly = "" - -val withGetter - get() = "" - -fun func() = "" - -var mutable = "" - -var mutableWithGetter - get() = "" - set(x) = TODO() - -object WithLateinit { - lateinit var kClass: KClass<*> -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.kt index 96eefba26b8..f22cb44a6b5 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationParameters/nonConstValAsArgument.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL import kotlin.reflect.KClass annotation class Ann(