From 89c3e04a36a7bcf6661d759def799f708e7c6adf Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Wed, 15 Dec 2021 14:11:08 +0300 Subject: [PATCH] [FIR IDE] Rethrow `IndexNotReadyException` from `KtFirReferenceResolver` Resolve can be called even when the indices are not ready. In such cases the `IndexNotReadyException` can be intentionally ignored by the platform code To make our code play nice with the platform, from now on we do not wrap `IndexNotReadyException` into another exception - instead we just let it fly and be ignored by the platform. If the platform doesn't choose to ignore it, then it will be showed as an error as usual --- .../analysis/api/fir/references/KtFirReferenceResolver.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt index 618617ba5ed..80cf14d47a2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReferenceResolver.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.references import com.intellij.openapi.diagnostic.ControlFlowException +import com.intellij.openapi.project.IndexNotReadyException import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementResolveResult import com.intellij.psi.ResolveResult @@ -26,7 +27,8 @@ object KtFirReferenceResolver : ResolveCache.PolyVariantResolver { val resolveToPsiElements = try { analyse(ref.expression) { ref.getResolvedToPsi(this) } } catch (e: Throwable) { - if (e is ControlFlowException) throw e + if (e is ControlFlowException || e is IndexNotReadyException) throw e + throw KtReferenceResolveException(ref, e) } resolveToPsiElements.map { KotlinResolveResult(it) }.toTypedArray()