Don't break entire highlighting if exception is thrown from one quickfix

This commit is contained in:
Dmitry Jemerov
2017-08-24 12:54:49 +02:00
parent e666b87545
commit 8cf7f7a8f3
@@ -24,6 +24,7 @@ import com.intellij.lang.annotation.Annotation
import com.intellij.lang.annotation.AnnotationHolder import com.intellij.lang.annotation.AnnotationHolder
import com.intellij.lang.annotation.Annotator import com.intellij.lang.annotation.Annotator
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.diagnostic.ControlFlowException
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.editor.colors.CodeInsightColors import com.intellij.openapi.editor.colors.CodeInsightColors
import com.intellij.openapi.editor.colors.TextAttributesKey import com.intellij.openapi.editor.colors.TextAttributesKey
@@ -256,7 +257,17 @@ private class ElementAnnotator(private val element: PsiElement,
} }
private fun setUpAnnotations(diagnostics: List<Diagnostic>, data: AnnotationPresentationInfo) { private fun setUpAnnotations(diagnostics: List<Diagnostic>, data: AnnotationPresentationInfo) {
val fixesMap = createQuickFixes(diagnostics) val fixesMap = try {
createQuickFixes(diagnostics)
}
catch (e: Exception) {
if (e is ControlFlowException) {
throw e
}
LOG.error(e)
MultiMap<Diagnostic, IntentionAction>()
}
for (range in data.ranges) { for (range in data.ranges) {
for (diagnostic in diagnostics) { for (diagnostic in diagnostics) {
val annotation = data.create(diagnostic, range, holder) val annotation = data.create(diagnostic, range, holder)
@@ -275,6 +286,10 @@ private class ElementAnnotator(private val element: PsiElement,
} }
} }
} }
companion object {
val LOG = Logger.getInstance(ElementAnnotator::class.java)
}
} }
private class AnnotationPresentationInfo( private class AnnotationPresentationInfo(