@@ -9,9 +9,11 @@ import org.jetbrains.kotlin.analysis.api.base.KaConstantValue
99import org.jetbrains.kotlin.analysis.api.impl.base.*
1010import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
1111import org.jetbrains.kotlin.fir.FirElement
12- import org.jetbrains.kotlin.fir.FirEvaluatorResult
1312import org.jetbrains.kotlin.fir.FirSession
14- import org.jetbrains.kotlin.fir.expressions.*
13+ import org.jetbrains.kotlin.fir.declarations.evaluateAs
14+ import org.jetbrains.kotlin.fir.expressions.FirExpression
15+ import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression
16+ import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
1517import org.jetbrains.kotlin.fir.psi
1618import org.jetbrains.kotlin.fir.references.toResolvedVariableSymbol
1719import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
@@ -53,26 +55,22 @@ internal object FirCompileTimeConstantEvaluator {
5355 }
5456 }
5557
56- @OptIn(PrivateConstantEvaluatorAPI ::class )
5758 fun evaluate (
5859 fir : FirElement ? ,
5960 firSession : FirSession
60- ): FirLiteralExpression ? {
61- val evaluatedResult = when (fir) {
62- is FirPropertyAccessExpression -> {
63- when (val referredVariable = fir.calleeReference.toResolvedVariableSymbol()) {
64- is FirPropertySymbol -> referredVariable.evaluateRecursionAware(fir, firSession)
65- is FirFieldSymbol -> referredVariable.evaluateRecursionAware(fir, firSession)
66- else -> null
67- }
61+ ): FirLiteralExpression ? = when (fir) {
62+ is FirPropertyAccessExpression -> {
63+ when (val referredVariable = fir.calleeReference.toResolvedVariableSymbol()) {
64+ is FirPropertySymbol -> referredVariable.evaluateRecursionAware(fir, firSession)
65+ is FirFieldSymbol -> referredVariable.evaluateRecursionAware(fir, firSession)
66+ else -> null
6867 }
69- is FirExpression -> FirExpressionEvaluator .evaluateExpression(fir, firSession)
70- else -> null
71- } as ? FirEvaluatorResult .Evaluated ? : return null
72-
73- return evaluatedResult.result as ? FirLiteralExpression
68+ }
69+ is FirExpression -> fir.evaluateAs<FirLiteralExpression >(firSession)
70+ else -> null
7471 }
7572
73+
7674 fun evaluateAsKtConstantValue (
7775 fir : FirElement ,
7876 firSession : FirSession
@@ -118,13 +116,12 @@ internal object FirCompileTimeConstantEvaluator {
118116 }
119117 }
120118
121- @OptIn(PrivateConstantEvaluatorAPI ::class )
122119 private fun FirVariableSymbol <* >.evaluateRecursionAware (
123120 expressionToEvaluate : FirExpression ,
124121 firSession : FirSession
125- ): FirEvaluatorResult ? =
122+ ): FirLiteralExpression ? =
126123 withTrackingVariableEvaluation(this ) {
127- FirExpressionEvaluator .evaluateExpression(expressionToEvaluate, firSession)
124+ expressionToEvaluate.evaluateAs< FirLiteralExpression >( firSession)
128125 }
129126
130127 private fun ConstantValueKind.adjustType (value : Any? ): Any? {
0 commit comments