diff --git a/analysis/analysis-internal-utils/build.gradle.kts b/analysis/analysis-internal-utils/build.gradle.kts index 57a5cc875bf..894fc5d439b 100644 --- a/analysis/analysis-internal-utils/build.gradle.kts +++ b/analysis/analysis-internal-utils/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { implementation(project(":compiler:psi")) implementation(kotlinxCollectionsImmutable()) implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } + implementation(project(":analysis:project-structure")) implementation(intellijCore()) } diff --git a/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/exceptionWithAttachmentBuilderHelpers.kt b/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/exceptionWithAttachmentBuilderHelpers.kt index 2cb7e650e64..c9e0a7df2fa 100644 --- a/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/exceptionWithAttachmentBuilderHelpers.kt +++ b/analysis/analysis-internal-utils/src/org/jetbrains/kotlin/analysis/utils/errors/exceptionWithAttachmentBuilderHelpers.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.utils.errors import com.intellij.psi.PsiElement import com.intellij.psi.PsiInvalidElementAccessException +import org.jetbrains.kotlin.analysis.project.structure.KtModule +import org.jetbrains.kotlin.analysis.project.structure.getKtModule import org.jetbrains.kotlin.analysis.utils.printer.getElementTextInContext import org.jetbrains.kotlin.psi.KtElement @@ -18,8 +20,14 @@ public fun ExceptionAttachmentBuilder.withPsiEntry(name: String, psi: PsiElement else -> psiElement.text } } + if (psi != null) { + withKtModuleEntry("${name}KtModule", psi.getKtModule()) + } } +public fun ExceptionAttachmentBuilder.withKtModuleEntry(name: String, module: KtModule?) { + withEntry(name, module) { ktModule -> ktModule.moduleDescription } +} public fun ExceptionAttachmentBuilder.withClassEntry(name: String, element: Any?) { withEntry(name, element) { it::class.java.name } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt index b1a4d3cc074..5a6bdf6d817 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt @@ -6,10 +6,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.util import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.utils.errors.ExceptionAttachmentBuilder import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment +import org.jetbrains.kotlin.analysis.utils.errors.withKtModuleEntry import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirElementWithResolvePhase import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererForDebugging import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributes @@ -27,9 +31,13 @@ fun ExceptionAttachmentBuilder.withFirEntry(name: String, fir: FirElement) { ).renderElementAsString(it) } withEntry("${name}FirSourceElementKind", fir.source?.kind?.let { it::class.simpleName }) + if (fir is FirElementWithResolvePhase) { + withKtModuleEntry("${name}KtModule", fir.llFirModuleData.ktModule) + } withPsiEntry("${name}Psi", fir.psi) } + fun ExceptionAttachmentBuilder.withFirSymbolEntry(name: String, symbol: FirBasedSymbol<*>) { withFirEntry("${name}Fir", symbol.fir) }