IDEA-128864 diff: fix invalid range applying
authorAleksey Pivovarov <AMPivovarov@gmail.com>
Mon, 6 Oct 2014 16:39:57 +0000 (20:39 +0400)
committerAleksey Pivovarov <AMPivovarov@gmail.com>
Mon, 6 Oct 2014 16:40:34 +0000 (20:40 +0400)
MergeOperation is created with fixed TextRange, so it will not be updated on change, like RangeHighlighters (and usage of RangeHighlighter is dangerous, as it could be updated incorrectly)
So we have to disable all actions until diff rebuild to prevent document corruption.

The 'right' fix of this issue could be to store line numbers inside action, update them on document change (like in LST), and use Document.getLineStartOffset() and etc inside write action.

platform/platform-impl/src/com/intellij/openapi/diff/impl/Rediffers.java

index 3a1f8b055ab598484c4417ff495a10a5a4f387f2..95afab208a1345eb6fe45a54f464df82c57319c2 100644 (file)
@@ -87,9 +87,7 @@ public class Rediffers {
     public void beforeDocumentChange(DocumentEvent event) {}
 
     public void documentChanged(DocumentEvent event) {
-      int newLines = StringUtil.getLineBreakCount(event.getNewFragment());
-      int oldLines = StringUtil.getLineBreakCount(event.getOldFragment());
-      if (newLines != oldLines) myPanel.invalidateDiff();
+      if (event.getOldLength() != event.getNewLength()) myPanel.invalidateDiff();
       requestRediff();
     }