KT-56843 [SLC] Support unsafe property initializers
This commit is contained in:
committed by
Space Team
parent
6b62499c85
commit
85b5a4521e
+8
@@ -6,11 +6,14 @@
|
||||
package org.jetbrains.kotlin.analysis.api.fir.components
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtCompileTimeConstantProvider
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
|
||||
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError
|
||||
@@ -36,6 +39,11 @@ internal class KtFirCompileTimeConstantProvider(
|
||||
return evaluateFir(expression.getOrBuildFir(firResolveSession), expression, mode)
|
||||
}
|
||||
|
||||
override fun evaluateAsAnnotationValue(expression: KtExpression): KtAnnotationValue? =
|
||||
(expression.getOrBuildFir(firResolveSession) as? FirExpression)?.let {
|
||||
FirAnnotationValueConverter.toConstantValue(it, firResolveSession.useSiteFirSession)
|
||||
}
|
||||
|
||||
private fun evaluateFir(
|
||||
fir: FirElement?,
|
||||
sourcePsi: KtExpression,
|
||||
|
||||
+4
-3
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.evaluate
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValueFactory
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
@@ -47,7 +48,7 @@ internal object FirAnnotationValueConverter {
|
||||
val type = (typeRef as? FirResolvedTypeRef)?.type
|
||||
val constantValue = when {
|
||||
value == null -> KtConstantValue.KtNullConstantValue(expression)
|
||||
type == null -> return null
|
||||
type == null -> KtConstantValueFactory.createConstantValue(value, psi as? KtElement)
|
||||
type.isBoolean -> KtConstantValue.KtBooleanConstantValue(value as Boolean, expression)
|
||||
type.isChar -> KtConstantValue.KtCharConstantValue((value as? Char) ?: (value as Number).toInt().toChar(), expression)
|
||||
type.isByte -> KtConstantValue.KtByteConstantValue((value as Number).toByte(), expression)
|
||||
@@ -61,10 +62,10 @@ internal object FirAnnotationValueConverter {
|
||||
type.isString -> KtConstantValue.KtStringConstantValue(value.toString(), expression)
|
||||
type.isFloat -> KtConstantValue.KtFloatConstantValue((value as Number).toFloat(), expression)
|
||||
type.isDouble -> KtConstantValue.KtDoubleConstantValue((value as Number).toDouble(), expression)
|
||||
else -> return null
|
||||
else -> null
|
||||
}
|
||||
|
||||
return KtConstantAnnotationValue(constantValue)
|
||||
return constantValue?.let(::KtConstantAnnotationValue)
|
||||
}
|
||||
|
||||
private fun Collection<FirExpression>.convertVarargsExpression(
|
||||
|
||||
Reference in New Issue
Block a user