[FIR] KT-44698: Print file:line:offset on K2 crash
^KT-44698 Fixed
This commit is contained in:
+5
-1
@@ -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) }
|
||||
}
|
||||
|
||||
+9
-4
@@ -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(
|
||||
|
||||
+2
-1
@@ -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() }
|
||||
|
||||
Reference in New Issue
Block a user