FIR IDE: report diagnostics for non-kt elements

This commit is contained in:
Ilya Kirillov
2021-01-29 19:50:40 +01:00
parent e9a5749cf4
commit f5ec37db95
3 changed files with 6 additions and 7 deletions
@@ -42,7 +42,6 @@ internal abstract class AbstractFirIdeDiagnosticsCollector(
private inner class Reporter : DiagnosticReporter() { private inner class Reporter : DiagnosticReporter() {
override fun report(diagnostic: FirDiagnostic<*>?, context: CheckerContext) { override fun report(diagnostic: FirDiagnostic<*>?, context: CheckerContext) {
if (diagnostic !is FirPsiDiagnostic<*>) return if (diagnostic !is FirPsiDiagnostic<*>) return
if (diagnostic.element.psi !is KtElement) return
onDiagnostic(diagnostic) onDiagnostic(diagnostic)
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics package org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorDeclarationAction import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorDeclarationAction
@@ -24,12 +25,10 @@ internal class FirIdeStructureElementDiagnosticsCollector private constructor(
) : AbstractFirIdeDiagnosticsCollector( ) : AbstractFirIdeDiagnosticsCollector(
session, session,
) { ) {
private val result = mutableMapOf<KtElement, MutableList<FirPsiDiagnostic<*>>>() private val result = mutableMapOf<PsiElement, MutableList<FirPsiDiagnostic<*>>>()
override fun onDiagnostic(diagnostic: FirPsiDiagnostic<*>) { override fun onDiagnostic(diagnostic: FirPsiDiagnostic<*>) {
(diagnostic.psiElement as? KtElement)?.let { ktElement -> result.addValueFor(diagnostic.psiElement, diagnostic)
result.addValueFor(ktElement, diagnostic)
}
} }
override fun onDeclarationEnter( override fun onDeclarationEnter(
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.file.structure package org.jetbrains.kotlin.idea.fir.low.level.api.file.structure
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorDeclarationAction import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorDeclarationAction
@@ -25,9 +26,9 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.ktDeclaration
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
internal class FileStructureElementDiagnostics( internal class FileStructureElementDiagnostics(
private val map: Map<KtElement, List<FirPsiDiagnostic<*>>> private val map: Map<PsiElement, List<FirPsiDiagnostic<*>>>
) { ) {
fun diagnosticsFor(element: KtElement): List<FirPsiDiagnostic<*>> = map[element] ?: emptyList() fun diagnosticsFor(element: PsiElement): List<FirPsiDiagnostic<*>> = map[element] ?: emptyList()
inline fun forEach(action: (List<FirPsiDiagnostic<*>>) -> Unit) = map.values.forEach(action) inline fun forEach(action: (List<FirPsiDiagnostic<*>>) -> Unit) = map.values.forEach(action)
} }