[KT-58817] Implicit import issues cannot be reported
To be reported with [1] imports require source. It was missing for implicit script imports. `FirScriptConfiguratorExtensionImpl` was extended and now adds fake source elements (users don't see imports in the source code). Since diagnostics for implicit import statements are meaningless for IDE, they are suppressed in `LLFirDiagnosticReporter`. ---------------------------------------------------------------------- [1]: DiagnosticReporter.reportOn()
This commit is contained in:
committed by
Space Team
parent
28ff94533a
commit
2a1d4a42ae
+10
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.AbstractKtSourceElement
|
||||
import org.jetbrains.kotlin.KtFakeSourceElement
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.addValueFor
|
||||
import org.jetbrains.kotlin.diagnostics.*
|
||||
|
||||
@@ -18,6 +20,10 @@ internal class LLFirDiagnosticReporter : DiagnosticReporter() {
|
||||
if (diagnostic == null) return
|
||||
if (context.isDiagnosticSuppressed(diagnostic)) return
|
||||
|
||||
// Implicit imports for scripts are currently implemented via FIR-tree mutation (they do not exist in default importing scopes).
|
||||
// So as a temporary solution we filter out related diagnostics here.
|
||||
if (diagnostic.isAboutImplicitImport()) return
|
||||
|
||||
val psiDiagnostic = when (diagnostic) {
|
||||
is KtPsiDiagnostic -> diagnostic
|
||||
is KtLightDiagnostic -> diagnostic.toPsiDiagnostic()
|
||||
@@ -51,6 +57,10 @@ internal class LLFirDiagnosticReporter : DiagnosticReporter() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtDiagnostic.isAboutImplicitImport() =
|
||||
(element is KtFakeSourceElement && (element as KtFakeSourceElement).kind == KtFakeSourceElementKind.ImplicitImport)
|
||||
|
||||
|
||||
private fun KtLightDiagnostic.toPsiDiagnostic(): KtPsiDiagnostic {
|
||||
val psiSourceElement = element.unwrapToKtPsiSourceElement()
|
||||
?: error("Diagnostic should be created from PSI in IDE")
|
||||
|
||||
Reference in New Issue
Block a user