From 8a8ab670b6952d5252f91eb6c4c3d403fdf4ca31 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 23 Jun 2014 16:59:35 +0400 Subject: [PATCH] diff: fix myLastChangedLine modification by changed range lastChangedLine - inclusive, while offset2 - exclusive We don't need to merge ranges anymore, as there are no mergeable ranges (previously, there was possible merge between newChangedRanges.last range and rangesAfterChange.first) Those merges could lead to range modification with equal lines at the start or end. --- .../openapi/vcs/ex/LineStatusTracker.java | 33 ++----------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java index 709dd9add69a..d8b931009f43 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java @@ -45,7 +45,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -344,7 +343,7 @@ public class LineStatusTracker { myFirstChangedLine = firstChangedRange.getOffset1(); } if (lastChangedRange != null && lastChangedRange.getOffset2() > myLastChangedLine) { - myLastChangedLine = lastChangedRange.getOffset2(); + myLastChangedLine = lastChangedRange.getOffset2() - 1; } int currentFirstLine = myFirstChangedLine; @@ -360,14 +359,12 @@ public class LineStatusTracker { if (!changedRanges.equals(newChangedRanges)) { replaceRanges(changedRanges, newChangedRanges); - myRanges = new ArrayList(); + myRanges = new ArrayList(rangesBeforeChange.size() + newChangedRanges.size() + rangesAfterChange.size()); myRanges.addAll(rangesBeforeChange); myRanges.addAll(newChangedRanges); myRanges.addAll(rangesAfterChange); - myRanges = mergeRanges(myRanges); - for (Range range : myRanges) { if (!range.hasHighlighter()) range.setHighlighter(createHighlighter(range)); } @@ -414,32 +411,6 @@ public class LineStatusTracker { return new RangesBuilder(lines, uLines, firstChangedLine, upToDateFirstLine).getRanges(); } - @NotNull - private List mergeRanges(@NotNull List ranges) { - ArrayList result = new ArrayList(); - Iterator iterator = ranges.iterator(); - if (!iterator.hasNext()) return result; - Range prev = iterator.next(); - while (iterator.hasNext()) { - Range range = iterator.next(); - if (prev.canBeMergedWith(range)) { - if (range.getHighlighter() != null) { - range.getHighlighter().dispose(); - } - if (prev.getHighlighter() != null) { - prev.getHighlighter().dispose(); - } - prev = prev.mergeWith(range); - } - else { - result.add(prev); - prev = range; - } - } - result.add(prev); - return result; - } - private void replaceRanges(@NotNull List rangesInChange, @NotNull List newRangesInChange) { for (Range range : rangesInChange) { if (range.getHighlighter() != null) {