diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt index fb134019b747983ed92c2f91c9523c676894a3a5..475470bd1dd88e9928e3d7523b9f782ad1cf6e16 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt @@ -17,3 +17,18 @@ FILE: nonConstValInAnnotationArgument.kt public get(): R|kotlin/Int| @R|Ann|((R|/foo|, R|/foo|.R|kotlin/String.plus|(R|/cnst|.R|kotlin/Any.toString|()))) public final fun test(): R|kotlin/Unit| { } + public final const val A: R|kotlin/String| = String(foo) + public get(): R|kotlin/String| + public final const val B: R|kotlin/Int| = Int(100) + public get(): R|kotlin/Int| + public final annotation class S : R|kotlin/Annotation| { + public constructor(s: R|kotlin/String|): R|S| { + super() + } + + public final val s: R|kotlin/String| = R|/s| + public get(): R|kotlin/String| + + } + @R|S|(R|/A|.R|kotlin/String.plus|(R|/B|)) public final fun foo(): R|kotlin/Unit| { + } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.kt index ae88b8599f98c5ee3bcee0a9b36096b8a868053b..8a9dfbb7c409ad60eb6111d54d38b5bc01be613d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.kt @@ -11,3 +11,11 @@ const val cnst = 2 ) ) fun test() {} + +const val A = "foo" +const val B = 100 + +annotation class S(val s: String) + +@S(A + B) +fun foo() {} \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationArgumentChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationArgumentChecker.kt index c0465b574f3dac348094793e301e0046b5c35475..c6648eb6e3f44562576355e7714ddf1421981927 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationArgumentChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationArgumentChecker.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperatorCall import org.jetbrains.kotlin.fir.symbols.StandardClassIds +import org.jetbrains.kotlin.fir.symbols.StandardClassIds.primitiveTypesAndString import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.Name @@ -168,7 +169,7 @@ object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() { if (calleeReference.name == PLUS && expClassId != receiverClassId - && (expClassId !in StandardClassIds.primitiveTypes || receiverClassId !in StandardClassIds.primitiveTypes) + && (expClassId !in primitiveTypesAndString || receiverClassId !in primitiveTypesAndString) ) return FirErrors.ANNOTATION_ARGUMENT_MUST_BE_CONST diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/StandardClassIds.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/StandardClassIds.kt index 6b66168a79a588e58d2a2137d7945ff93104cc6f..bf07f94a11ff61efc6df3c6555f2ab0acfb2a859 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/StandardClassIds.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/StandardClassIds.kt @@ -71,6 +71,7 @@ object StandardClassIds { Byte, Short, Int, Long, Float, Double ) + val primitiveTypesAndString = primitiveTypes + String val primitiveArrayTypeByElementType = primitiveTypes.associate { id -> id to id.shortClassName.primitiveArrayId() } val elementTypeByPrimitiveArrayType = primitiveArrayTypeByElementType.inverseMap() diff --git a/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithConstants.kt b/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithConstants.kt index 3b1c07084ef86b715f4df688482b0282d94e266f..c565aab7244307e867a757bb9b21d48a61a3b4e0 100644 --- a/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithConstants.kt +++ b/compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithConstants.kt @@ -1,4 +1,3 @@ -// IGNORE_FIR_DIAGNOSTICS // WITH_REFLECT // TARGET_BACKEND: JVM