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