[K2] Properly serialize annotation that has vararg with single argument

#KT-60163 Fixed
This commit is contained in:
Ivan Kylchik
2023-08-07 12:04:45 +02:00
committed by Space Team
parent 8ff2782045
commit 7cbf3b28ca
5 changed files with 203 additions and 0 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression
import org.jetbrains.kotlin.fir.packageFqName
import org.jetbrains.kotlin.fir.serialization.constant.ConstValueProvider
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -25,6 +26,10 @@ class ConstValueProviderImpl(
val firFile = processingFirFile
if (firExpression == null || firFile == null) return null
// We can't evaluate vararg expression, only its arguments. We can accidentally find a const result for vararg
// when there is only one argument, they both are going to have the same offset.
if (firExpression is FirVarargArgumentsExpression) return null
val fileName = firFile.packageFqName.child(Name.identifier(firFile.name)).asString()
return if (firExpression is FirQualifiedAccessExpression) {
// TODO check that this behavior is expected in ConversionUtils and if not fix it