Report highlight errors to WolfTheProblemSolver
Relates to #KT-37702 #KTIJ-1246 Fixed Original commit: bd222a5255c2fd6f4abfce3115f81733ef9a39f3
This commit is contained in:
committed by
Space
parent
afe71f5d59
commit
8783ebc352
+39
@@ -6,15 +6,23 @@
|
||||
package org.jetbrains.kotlin.idea.highlighter
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.Divider
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo
|
||||
import com.intellij.codeInsight.intention.IntentionAction
|
||||
import com.intellij.codeInsight.problems.ProblemImpl
|
||||
import com.intellij.lang.annotation.Annotation
|
||||
import com.intellij.lang.annotation.AnnotationHolder
|
||||
import com.intellij.lang.annotation.Annotator
|
||||
import com.intellij.lang.annotation.HighlightSeverity
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.editor.Document
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.problems.Problem
|
||||
import com.intellij.problems.WolfTheProblemSolver
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.util.CommonProcessors
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
@@ -44,6 +52,12 @@ abstract class AbstractKotlinHighlightingPass(file: KtFile, document: Document)
|
||||
}
|
||||
}
|
||||
|
||||
override fun doApplyInformationToEditor() {
|
||||
super.doApplyInformationToEditor()
|
||||
|
||||
reportErrorsToWolf()
|
||||
}
|
||||
|
||||
override fun buildBindingContext(holder: AnnotationHolder): BindingContext {
|
||||
val dividedElements: List<Divider.DividedElements> = ArrayList()
|
||||
Divider.divideInsideAndOutsideAllRoots(
|
||||
@@ -153,6 +167,31 @@ abstract class AbstractKotlinHighlightingPass(file: KtFile, document: Document)
|
||||
|
||||
protected open fun shouldSuppressUnusedParameter(parameter: KtParameter): Boolean = false
|
||||
|
||||
private fun reportErrorsToWolf() {
|
||||
if (!file.viewProvider.isPhysical) return // e.g. errors in evaluate expression
|
||||
val project: Project = file.project
|
||||
if (!PsiManager.getInstance(project).isInProject(file)) return // do not report problems in libraries
|
||||
val file: VirtualFile = file.virtualFile ?: return
|
||||
|
||||
val wolf = WolfTheProblemSolver.getInstance(project)
|
||||
|
||||
val hasSyntaxErrors = wolf.hasSyntaxErrors(file)
|
||||
val problemFile = wolf.isProblemFile(file)
|
||||
|
||||
// do nothing if file has already problems
|
||||
if (hasSyntaxErrors || problemFile) return
|
||||
|
||||
val problems = convertToProblems(infos, file)
|
||||
wolf.reportProblems(file, problems)
|
||||
}
|
||||
|
||||
private fun convertToProblems(
|
||||
infos: Collection<HighlightInfo>,
|
||||
file: VirtualFile,
|
||||
hasErrorElement: Boolean = true
|
||||
): List<Problem> =
|
||||
infos.filter { it.severity == HighlightSeverity.ERROR }.map { ProblemImpl(file, it, hasErrorElement) }
|
||||
|
||||
companion object {
|
||||
fun createQuickFixes(diagnostic: Diagnostic): Collection<IntentionAction> =
|
||||
createQuickFixes(listOfNotNull(diagnostic))[diagnostic]
|
||||
|
||||
Reference in New Issue
Block a user