提交 1a0be3ee 编写于 作者: M Mikhail Glukhikh

Fix FirAnnotationArgumentChecker (String + ... case) #KT-44995 Fixed

上级 cd8f597e
......@@ -17,3 +17,18 @@ FILE: nonConstValInAnnotationArgument.kt
public get(): R|kotlin/Int|
@R|Ann|(<implicitArrayOf>(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<R|kotlin/Any|>()
}
public final val s: R|kotlin/String| = R|<local>/s|
public get(): R|kotlin/String|
}
@R|S|(R|/A|.R|kotlin/String.plus|(R|/B|)) public final fun foo(): R|kotlin/Unit| {
}
......@@ -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
......@@ -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
......
......@@ -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()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册