From 45e01a8b3d0998a2b8b2bb52d4deea72247e593d Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 6 Jul 2020 19:35:39 +0300 Subject: [PATCH] FIR IDE: precalculate DuplicatedFirSourceElementsException error message It may be called from non-read action --- .../low/level/api/FirModuleResolveState.kt | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt index fd76fd89a9a..81211db1331 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt @@ -152,23 +152,21 @@ internal class FirModuleResolveStateImpl(override val sessionProvider: FirProjec } class DuplicatedFirSourceElementsException( - private val existingFir: FirElement, - private val newFir: FirElement, - private val psi: KtElement + existingFir: FirElement, + newFir: FirElement, + psi: KtElement ) : IllegalStateException() { - override val message: String? - get() = - """|The PSI element should be used only once as a real PSI source of FirElement, - |the elements ${if (existingFir.source === newFir.source) "HAVE" else "DON'T HAVE"} the same instances of source elements - | - |existing FIR element is $existingFir with text: - |${existingFir.render().trim()} - | - |new FIR element is $newFir with text: - | ${newFir.render().trim()} - | - |PSI element is $psi with text in context: - |${getElementInContext(psi)}""".trimMargin() + override val message: String? = """|The PSI element should be used only once as a real PSI source of FirElement, + |the elements ${if (existingFir.source === newFir.source) "HAVE" else "DON'T HAVE"} the same instances of source elements + | + |existing FIR element is $existingFir with text: + |${existingFir.render().trim()} + | + |new FIR element is $newFir with text: + | ${newFir.render().trim()} + | + |PSI element is $psi with text in context: + |${getElementInContext(psi)}""".trimMargin() private fun getElementInContext(neededElement: KtElement): String { val context = neededElement.containingDeclarationForPseudocode ?: neededElement.containingKtFile