From fcb253ad4930dc766489ac0dfa42e41add39bc5d Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 11 Mar 2024 12:10:03 +0100 Subject: [PATCH] IDEA-331139 lst: recover from our highlighter being destroyed externally GitOrigin-RevId: f06eaa6e76611822cfed2d5e6476af2990a133a8 --- .../openapi/vcs/ex/LineStatusMarkerRenderer.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusMarkerRenderer.kt b/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusMarkerRenderer.kt index 653a705a2e5d..04b883ae64c4 100644 --- a/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusMarkerRenderer.kt +++ b/platform/diff-impl/src/com/intellij/openapi/vcs/ex/LineStatusMarkerRenderer.kt @@ -59,10 +59,15 @@ abstract class LineStatusMarkerRenderer internal constructor( updateQueue.queue(DisposableUpdate.createDisposable(updateQueue, "update", Runnable { updateHighlighters() })) } + /** + * Recover from an evildoer destroying all the highlighters for the Editor/Project/IDE. + * IDEA-331139 IDEA-246614 + */ private fun scheduleValidateHighlighter() { - // IDEA-246614 updateQueue.queue(DisposableUpdate.createDisposable(updateQueue, "validate highlighter", Runnable { if (disposed || gutterHighlighter.isValid()) return@Runnable + + LOG.warn("Line marker highlighter was recovered. This incident will be reported.") disposeHighlighter(gutterHighlighter) gutterHighlighter = createGutterHighlighter() updateHighlighters() @@ -93,6 +98,11 @@ abstract class LineStatusMarkerRenderer internal constructor( @RequiresEdt private fun updateHighlighters() { if (disposed) return + + if (!gutterHighlighter.isValid()) { + scheduleValidateHighlighter() + } + repaintGutter() updateErrorStripeHighlighters() }