From ae95b6745cafb7145a3403388599460516c5ae57 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 2 Nov 2021 17:50:56 +0900 Subject: [PATCH] [FIR IDE] Provide initializers for non-const properties in AAPI/FE10 This commit partially fixes KtFe10SymbolByPsiTestGenerated.testDeprecated(). --- .../psiBased/KtFe10PsiKotlinPropertySymbol.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt index 7c50e56c3f2..7997b1fb09b 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt @@ -39,6 +39,8 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator +import org.jetbrains.kotlin.types.TypeUtils internal class KtFe10PsiKotlinPropertySymbol( override val psi: KtProperty, @@ -99,15 +101,19 @@ internal class KtFe10PsiKotlinPropertySymbol( override val initializer: KtConstantValue? get() = withValidityAssertion { - if (psi.initializer == null) { - return null - } + val initializer = psi.initializer ?: return null val compileTimeInitializer = descriptor?.compileTimeInitializer if (compileTimeInitializer != null) { return compileTimeInitializer.toKtConstantValue() } + val bindingContext = analysisContext.analyze(initializer) + val constantValue = ConstantExpressionEvaluator.getConstant(initializer, bindingContext) + if (constantValue != null) { + return constantValue.toConstantValue(descriptor?.type ?: TypeUtils.NO_EXPECTED_TYPE).toKtConstantValue() + } + return KtUnsupportedConstantValue }