From c2c51add0246f10a40fe2fba91c84ab9bf2d1311 Mon Sep 17 00:00:00 2001 From: irengrig Date: Fri, 24 Jun 2011 17:39:19 +0400 Subject: [PATCH] EA-26379 debug info java.lang.AssertionError at com.intellij.openapi.vcs.checkin.StepIntersection.dataStep(StepIntersection.java:126) at com.intellij.openapi.vcs.checkin.StepIntersection.process(StepIntersection.java:93) at com.intellij.openapi.vcs.checkin.TodoCheckinHandlerWorker$MyEditedFileProcessor.process(TodoCheckinHandlerWorker.java:202) at com.intellij.openapi.vcs.checkin.TodoCheckinHandlerWorker.execute(TodoCheckinHandlerWorker.java:131) at com.intellij.openapi.vcs.checkin.TodoCheckinHandler$2.run(TodoCheckinHandler.java:148) --- .../openapi/vcs/checkin/StepIntersection.java | 22 +++++++++++++++---- .../vcs/checkin/TodoCheckinHandlerWorker.java | 16 ++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/StepIntersection.java b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/StepIntersection.java index 225a761947a4..2d40bc977135 100644 --- a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/StepIntersection.java +++ b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/StepIntersection.java @@ -15,11 +15,15 @@ */ package com.intellij.openapi.vcs.checkin; +import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.TextRange; import com.intellij.util.PairConsumer; import com.intellij.util.containers.Convertor; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; /** * @author irengrig @@ -39,9 +43,15 @@ public class StepIntersection { private Area myCurArea; private final List myAreas; private HackSearch myHackSearch; + // EA-28497, EA-26379 + private Getter myDebugDocumentTextGetter; - public StepIntersection(Convertor dataConvertor, Convertor areasConvertor, final List areas) { + public StepIntersection(Convertor dataConvertor, + Convertor areasConvertor, + final List areas, + Getter debugDocumentTextGetter) { myAreas = areas; + myDebugDocumentTextGetter = debugDocumentTextGetter; myAreaIndex = 0; myDataConvertor = dataConvertor; myAreasConvertor = areasConvertor; @@ -116,14 +126,18 @@ public class StepIntersection { if (myAreaIndex >= myAreas.size()) { return; } - assert myAreaRange == null || myAreaRange.getEndOffset() < myAreasConvertor.convert(myAreas.get(myAreaIndex)).getStartOffset(); + assert myAreaRange == null || myAreaRange.getEndOffset() < myAreasConvertor.convert(myAreas.get(myAreaIndex)).getStartOffset() : + "Area ranges intersect: first: " + myAreaRange + ", second: " + myAreasConvertor.convert(myAreas.get(myAreaIndex)) + ", text: '" + + myDebugDocumentTextGetter.get() + "'"; myCurArea = myAreas.get(myAreaIndex); myAreaRange = myAreasConvertor.convert(myCurArea); } private void dataStep() { myCurData = myDataIterator.next(); - assert myDataRange == null || myDataRange.getEndOffset() < myDataConvertor.convert(myCurData).getStartOffset(); + assert myDataRange == null || myDataRange.getEndOffset() < myDataConvertor.convert(myCurData).getStartOffset() : + "Data ranges intersect: first: " + myDataRange + ", second: " + myDataConvertor.convert(myCurData) + ", text: '" + + myDebugDocumentTextGetter.get() + "'"; myDataRange = myDataConvertor.convert(myCurData); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java index bd2a2d6ceab9..cc261cc2de8b 100644 --- a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java +++ b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java @@ -28,6 +28,7 @@ import com.intellij.openapi.diff.impl.processing.DiffPolicy; import com.intellij.openapi.diff.impl.util.TextDiffTypeEnum; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; @@ -198,7 +199,13 @@ public class TodoCheckinHandlerWorker { } } final StepIntersection intersection = - new StepIntersection(TodoItemConvertor.getInstance(), LineFragmentConvertor.getInstance(), lineFragments); + new StepIntersection(TodoItemConvertor.getInstance(), LineFragmentConvertor.getInstance(), lineFragments, + new Getter() { + @Override + public String get() { + return myAfterContent; + } + }); intersection.process(newTodoItems, new PairConsumer() { @@ -247,7 +254,12 @@ public class TodoCheckinHandlerWorker { } if (myOldTodoTexts == null) { final StepIntersection intersection = new StepIntersection( - LineFragmentConvertor.getInstance(), TodoItemConvertor.getInstance(), myOldItems); + LineFragmentConvertor.getInstance(), TodoItemConvertor.getInstance(), myOldItems, new Getter() { + @Override + public String get() { + return myBeforeContent; + } + }); myOldTodoTexts = new HashSet(); intersection.process(Collections.singletonList(myCurrentLineFragment), new PairConsumer() { @Override