FIR IDE/UAST: add KtCompileTimeConstantProvider with evaluate API

This commit is contained in:
Jinseong Jeon
2021-06-11 11:10:13 -07:00
parent 7d157f006b
commit 833761ac3c
60 changed files with 202 additions and 149 deletions
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitIntTypeRef
import org.jetbrains.kotlin.resolve.constants.ConstantValue
import org.jetbrains.kotlin.types.ConstantValueKind
/**
@@ -25,10 +24,10 @@ import org.jetbrains.kotlin.types.ConstantValueKind
class FirCompileTimeConstantEvaluator {
// TODO: Handle boolean operators, const property loading, class reference, array, annotation values, etc.
fun evaluate(expression: FirExpression): ConstantValue<*>? =
fun evaluate(expression: FirExpression): FirConstExpression<*>? =
when (expression) {
is FirConstExpression<*> -> expression.value as? ConstantValue<*>
is FirFunctionCall -> evaluate(expression)?.value as? ConstantValue<*>
is FirConstExpression<*> -> expression
is FirFunctionCall -> evaluate(expression)
else -> null
}