[FIR] KT-44698: Print file:line:offset on K2 crash

^KT-44698 Fixed
This commit is contained in:
Nikolay Lunyak
2022-09-21 15:08:52 +03:00
committed by teamcity
parent bba5b87733
commit 2e9f9f987b
24 changed files with 363 additions and 147 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.fir.components
import org.jetbrains.kotlin.util.SourceCodeAnalysisException
import org.jetbrains.kotlin.analysis.api.calls.*
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.analysis.api.diagnostics.KtNonBoundToPsiErrorDiagnostic
@@ -1223,7 +1224,10 @@ internal class KtFirCallResolver(
action()
} catch (e: Throwable) {
if (shouldIjPlatformExceptionBeRethrown(e)) throw e
buildErrorWithAttachment("Error during resolving call ${element::class.java.name}", cause = e) {
buildErrorWithAttachment(
"Error during resolving call ${element::class.java.name}",
cause = if (e is SourceCodeAnalysisException) e.cause else e,
) {
withPsiEntry("psi", element)
element.getOrBuildFir(firResolveSession)?.let { withFirEntry("fir", it) }
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponent
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.util.withSourceCodeAnalysisExceptionUnwrapping
internal abstract class FileStructureElementDiagnosticRetriever {
abstract fun retrieve(
@@ -36,8 +37,10 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
val context = moduleComponents.globalResolveComponents.lockProvider.withWriteLock(firFile) {
PersistenceContextCollector.collectContext(sessionHolder, firFile, structureElementDeclaration)
}
return collector.collectForStructureElement(structureElementDeclaration) { components ->
Visitor(structureElementDeclaration, context, components)
return withSourceCodeAnalysisExceptionUnwrapping {
collector.collectForStructureElement(structureElementDeclaration) { components ->
Visitor(structureElementDeclaration, context, components)
}
}
}
@@ -102,8 +105,10 @@ internal object FileDiagnosticRetriever : FileStructureElementDiagnosticRetrieve
collector: FileStructureElementDiagnosticsCollector,
moduleComponents: LLFirModuleResolveComponents,
): FileStructureElementDiagnosticList =
collector.collectForStructureElement(firFile) { components ->
Visitor(components, moduleComponents)
withSourceCodeAnalysisExceptionUnwrapping {
collector.collectForStructureElement(firFile) { components ->
Visitor(components, moduleComponents)
}
}
private class Visitor(
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve
import org.jetbrains.kotlin.util.SourceCodeAnalysisException
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDeclarationDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignationWithFile
@@ -443,7 +444,7 @@ private fun rethrowWithDetails(
appendLine("declaration KtModule: ${moduleData.ktModule::class}")
appendLine("declaration platform: ${moduleData.ktModule.platform}")
},
cause = e,
cause = if (e is SourceCodeAnalysisException) e.cause else e,
) {
withEntry("KtModule", firDeclarationToResolve.llFirModuleData.ktModule) { it.moduleDescription }
withEntry("session", firDeclarationToResolve.llFirSession) { it.toString() }