[Analysis API] add information about KtModule to reported exceptions

This commit is contained in:
Ilya Kirillov
2023-02-15 16:41:35 +01:00
committed by Space Team
parent c37ee83791
commit fbcaf3efeb
3 changed files with 17 additions and 0 deletions
@@ -7,6 +7,7 @@ dependencies {
implementation(project(":compiler:psi")) implementation(project(":compiler:psi"))
implementation(kotlinxCollectionsImmutable()) implementation(kotlinxCollectionsImmutable())
implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
implementation(project(":analysis:project-structure"))
implementation(intellijCore()) implementation(intellijCore())
} }
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.utils.errors
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiInvalidElementAccessException 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.analysis.utils.printer.getElementTextInContext
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
@@ -18,8 +20,14 @@ public fun ExceptionAttachmentBuilder.withPsiEntry(name: String, psi: PsiElement
else -> psiElement.text 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?) { public fun ExceptionAttachmentBuilder.withClassEntry(name: String, element: Any?) {
withEntry(name, element) { it::class.java.name } withEntry(name, element) { it::class.java.name }
@@ -6,10 +6,14 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.util package org.jetbrains.kotlin.analysis.low.level.api.fir.util
import com.intellij.psi.PsiElement 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.ExceptionAttachmentBuilder
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment 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.analysis.utils.errors.withPsiEntry
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererForDebugging import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererForDebugging
import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributes import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributes
@@ -27,9 +31,13 @@ fun ExceptionAttachmentBuilder.withFirEntry(name: String, fir: FirElement) {
).renderElementAsString(it) ).renderElementAsString(it)
} }
withEntry("${name}FirSourceElementKind", fir.source?.kind?.let { it::class.simpleName }) 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) withPsiEntry("${name}Psi", fir.psi)
} }
fun ExceptionAttachmentBuilder.withFirSymbolEntry(name: String, symbol: FirBasedSymbol<*>) { fun ExceptionAttachmentBuilder.withFirSymbolEntry(name: String, symbol: FirBasedSymbol<*>) {
withFirEntry("${name}Fir", symbol.fir) withFirEntry("${name}Fir", symbol.fir)
} }