From ab06f772fc62c42b93c0cfd49a59f3916d123868 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 14 Nov 2019 22:19:47 +0900 Subject: [PATCH] EA-209419: Fix read action requirement in Light constant evaluator --- .../kotlin/idea/KotlinLightConstantExpressionEvaluator.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinLightConstantExpressionEvaluator.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinLightConstantExpressionEvaluator.kt index b620850cc77..1ac22878c9b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinLightConstantExpressionEvaluator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinLightConstantExpressionEvaluator.kt @@ -22,6 +22,7 @@ import com.intellij.psi.impl.ConstantExpressionEvaluator import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.resolve.DelegatingBindingTrace import org.jetbrains.kotlin.resolve.constants.ArrayValue @@ -55,9 +56,12 @@ class KotlinLightConstantExpressionEvaluator : ConstantExpressionEvaluator { val evaluator = FrontendConstantExpressionEvaluator( resolutionFacade.moduleDescriptor, expressionToCompute.languageVersionSettings, resolutionFacade.project ) - val evaluatorTrace = DelegatingBindingTrace(resolutionFacade.analyze(expressionToCompute), "Evaluating annotation argument") - val constant = evaluator.evaluateExpression(expressionToCompute, evaluatorTrace) ?: return null + val constant = runReadAction { + val evaluatorTrace = DelegatingBindingTrace(resolutionFacade.analyze(expressionToCompute), "Evaluating annotation argument") + evaluator.evaluateExpression(expressionToCompute, evaluatorTrace) + } ?: return null + if (constant.isError) return null return evalConstantValue(constant.toConstantValue(TypeUtils.NO_EXPECTED_TYPE)) }