From 65fe6ddae92a949d19eea78b5695771d1dd0ed31 Mon Sep 17 00:00:00 2001 From: "Alexander.Kirsanov" Date: Tue, 6 Sep 2016 18:05:43 +0300 Subject: [PATCH] End offset of highlightInfo processing in updateHighlightersByTyping shouldn't depend on a document change length --- .../daemon/impl/UpdateHighlightersUtil.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java index 2efaf73d6616..b93d2f029a3e 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java @@ -439,28 +439,24 @@ public class UpdateHighlightersUtil { assertMarkupConsistent(markup, project); final int start = e.getOffset() - 1; - final int end = start + Math.max(e.getOldLength(), e.getNewLength()); + final int end = start + e.getOldLength(); final List toRemove = new ArrayList<>(); DaemonCodeAnalyzerEx.processHighlights(document, project, null, start, end, info -> { + if (!info.needUpdateOnTyping()) return true; + RangeHighlighter highlighter = info.highlighter; - boolean remove = false; - if (info.needUpdateOnTyping()) { - int highlighterStart = highlighter.getStartOffset(); - int highlighterEnd = highlighter.getEndOffset(); - if (info.isAfterEndOfLine()) { - if (highlighterStart < document.getTextLength()) { - highlighterStart += 1; - } - if (highlighterEnd < document.getTextLength()) { - highlighterEnd += 1; - } + int highlighterStart = highlighter.getStartOffset(); + int highlighterEnd = highlighter.getEndOffset(); + if (info.isAfterEndOfLine()) { + if (highlighterStart < document.getTextLength()) { + highlighterStart += 1; } - if (!highlighter.isValid() || start < highlighterEnd && highlighterStart <= end) { - remove = true; + if (highlighterEnd < document.getTextLength()) { + highlighterEnd += 1; } } - if (remove) { + if (!highlighter.isValid() || start < highlighterEnd && highlighterStart <= end) { toRemove.add(info); } return true;