FIR IDE: add severity to KtDiagnostic
This commit is contained in:
+8
-1
@@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.progress.ProgressIndicator
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.idea.frontend.api.analyze
|
||||
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnostic
|
||||
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
|
||||
@@ -50,12 +51,18 @@ class KotlinHighLevelDiagnosticHighlightingPass(
|
||||
private fun addDiagnostic(diagnostic: KtDiagnosticWithPsi) {
|
||||
val fixes = service<KtQuickFixService>().getQuickFixesFor(diagnostic as KtFirDiagnostic)
|
||||
annotationHolder.runAnnotatorWithContext(diagnostic.psi) { element, annotator ->
|
||||
annotationHolder.newAnnotation(HighlightSeverity.ERROR, diagnostic.getMessageToRender())
|
||||
annotationHolder.newAnnotation(diagnostic.getHighlightSeverity(), diagnostic.getMessageToRender())
|
||||
.addFixes(fixes)
|
||||
.create()
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtDiagnosticWithPsi.getHighlightSeverity() = when (severity) {
|
||||
Severity.INFO -> HighlightSeverity.INFORMATION
|
||||
Severity.ERROR -> HighlightSeverity.ERROR
|
||||
Severity.WARNING -> HighlightSeverity.WARNING
|
||||
}
|
||||
|
||||
|
||||
private fun AnnotationBuilder.addFixes(fixes: List<IntentionAction>) =
|
||||
fixes.fold(this, AnnotationBuilder::withFix)
|
||||
|
||||
+6
-2
@@ -7,11 +7,13 @@ package org.jetbrains.kotlin.idea.frontend.api.diagnostics
|
||||
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
interface KtDiagnostic : ValidityTokenOwner {
|
||||
val severity: Severity
|
||||
val factoryName: String?
|
||||
val defaultMessage: String
|
||||
}
|
||||
@@ -22,11 +24,13 @@ interface KtDiagnosticWithPsi : KtDiagnostic {
|
||||
val diagnosticClass: KClass<out KtDiagnosticWithPsi>
|
||||
}
|
||||
|
||||
class KtSimpleDiagnostic(
|
||||
class KtNonBoundToPsiErrorDiagnostic(
|
||||
override val factoryName: String?,
|
||||
override val defaultMessage: String,
|
||||
override val token: ValidityToken,
|
||||
) : KtDiagnostic
|
||||
) : KtDiagnostic {
|
||||
override val severity: Severity get() = Severity.ERROR
|
||||
}
|
||||
|
||||
fun KtDiagnostic.getDefaultMessageWithFactoryName(): String =
|
||||
if (factoryName == null) defaultMessage
|
||||
|
||||
+3
-4
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.components
|
||||
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.toFirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
|
||||
@@ -25,7 +24,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.idea.frontend.api.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.calls.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtCallResolver
|
||||
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtNonBoundToPsiErrorDiagnostic
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
@@ -113,13 +112,13 @@ internal class KtFirCallResolver(
|
||||
private fun FirErrorNamedReference.createErrorCallTarget(): KtErrorCallTarget =
|
||||
KtErrorCallTarget(
|
||||
getCandidateSymbols().mapNotNull { it.fir.buildSymbol(firSymbolBuilder) as? KtFunctionLikeSymbol },
|
||||
source?.let { diagnostic.asKtDiagnostic(it) } ?: KtSimpleDiagnostic(factoryName = null, diagnostic.reason, token)
|
||||
source?.let { diagnostic.asKtDiagnostic(it) } ?: KtNonBoundToPsiErrorDiagnostic(factoryName = null, diagnostic.reason, token)
|
||||
)
|
||||
|
||||
private fun FirErrorReferenceWithCandidate.createErrorCallTarget(): KtErrorCallTarget =
|
||||
KtErrorCallTarget(
|
||||
getCandidateSymbols().mapNotNull { it.fir.buildSymbol(firSymbolBuilder) as? KtFunctionLikeSymbol },
|
||||
source?.let { diagnostic.asKtDiagnostic(it) } ?: KtSimpleDiagnostic(factoryName = null, diagnostic.reason, token)
|
||||
source?.let { diagnostic.asKtDiagnostic(it) } ?: KtNonBoundToPsiErrorDiagnostic(factoryName = null, diagnostic.reason, token)
|
||||
)
|
||||
|
||||
private fun FirResolvedNamedReference.getKtFunctionOrConstructorSymbol(): KtFunctionLikeSymbol? =
|
||||
|
||||
+4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics
|
||||
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderer
|
||||
@@ -35,4 +36,7 @@ internal interface KtAbstractFirDiagnostic : KtDiagnosticWithPsi {
|
||||
|
||||
override val psi: PsiElement
|
||||
get() = firDiagnostic.psiElement
|
||||
|
||||
override val severity: Severity
|
||||
get() = firDiagnostic.severity
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user