[FIR] Add unified diagnostics for psi and light tree
This commit is contained in:
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.idea.fir
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.registerAllComponents
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
|
||||
class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState: FirModuleResolveState) : AbstractDiagnosticCollector(session) {
|
||||
@@ -20,12 +20,11 @@ class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState:
|
||||
}
|
||||
|
||||
private inner class Reporter : DiagnosticReporter() {
|
||||
override fun report(diagnostic: FirDiagnostic?) {
|
||||
if (diagnostic == null) return
|
||||
val psi = diagnostic.source.psi as? KtElement ?: return
|
||||
resolveState.record(psi, diagnostic.diagnostic)
|
||||
override fun report(diagnostic: FirDiagnostic<*>?) {
|
||||
if (diagnostic !is FirPsiDiagnostic<*>) return
|
||||
val psi = diagnostic.element.psi as? KtElement ?: return
|
||||
resolveState.record(psi, diagnostic.asPsiBasedDiagnostic())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private lateinit var reporter: Reporter
|
||||
@@ -34,7 +33,7 @@ class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState:
|
||||
reporter = Reporter()
|
||||
}
|
||||
|
||||
override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
|
||||
override fun getCollectedDiagnostics(): Iterable<FirDiagnostic<*>> {
|
||||
// Not necessary in IDE
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
@@ -49,7 +49,7 @@ interface FirModuleResolveState {
|
||||
|
||||
fun record(psi: KtElement, diagnostic: Diagnostic)
|
||||
|
||||
fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic> = emptyList())
|
||||
fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic<*>> = emptyList())
|
||||
}
|
||||
|
||||
class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionProvider) : FirModuleResolveState {
|
||||
@@ -91,9 +91,11 @@ class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionP
|
||||
list += diagnostic
|
||||
}
|
||||
|
||||
override fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic>) {
|
||||
override fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic<*>>) {
|
||||
for (diagnostic in diagnostics) {
|
||||
(diagnostic.source.psi as? KtElement)?.let { record(it, diagnostic.diagnostic) }
|
||||
require(diagnostic is FirPsiDiagnostic<*>)
|
||||
val psi = diagnostic.element.psi as? KtElement ?: continue
|
||||
record(psi, diagnostic.asPsiBasedDiagnostic())
|
||||
}
|
||||
|
||||
diagnosedFiles[file] = file.modificationStamp
|
||||
|
||||
Reference in New Issue
Block a user