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)
This commit is contained in:
irengrig
2011-06-24 18:45:14 +04:00
parent ce21b91d8b
commit c2c51add02
2 changed files with 32 additions and 6 deletions
@@ -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<Data, Area> {
private Area myCurArea;
private final List<Area> myAreas;
private HackSearch<Data,Area,TextRange> myHackSearch;
// EA-28497, EA-26379
private Getter<String> myDebugDocumentTextGetter;
public StepIntersection(Convertor<Data, TextRange> dataConvertor, Convertor<Area, TextRange> areasConvertor, final List<Area> areas) {
public StepIntersection(Convertor<Data, TextRange> dataConvertor,
Convertor<Area, TextRange> areasConvertor,
final List<Area> areas,
Getter<String> debugDocumentTextGetter) {
myAreas = areas;
myDebugDocumentTextGetter = debugDocumentTextGetter;
myAreaIndex = 0;
myDataConvertor = dataConvertor;
myAreasConvertor = areasConvertor;
@@ -116,14 +126,18 @@ public class StepIntersection<Data, Area> {
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);
}
}
@@ -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<TodoItem, LineFragment> intersection =
new StepIntersection<TodoItem, LineFragment>(TodoItemConvertor.getInstance(), LineFragmentConvertor.getInstance(), lineFragments);
new StepIntersection<TodoItem, LineFragment>(TodoItemConvertor.getInstance(), LineFragmentConvertor.getInstance(), lineFragments,
new Getter<String>() {
@Override
public String get() {
return myAfterContent;
}
});
intersection.process(newTodoItems, new PairConsumer<TodoItem, LineFragment>() {
@@ -247,7 +254,12 @@ public class TodoCheckinHandlerWorker {
}
if (myOldTodoTexts == null) {
final StepIntersection<LineFragment, TodoItem> intersection = new StepIntersection<LineFragment, TodoItem>(
LineFragmentConvertor.getInstance(), TodoItemConvertor.getInstance(), myOldItems);
LineFragmentConvertor.getInstance(), TodoItemConvertor.getInstance(), myOldItems, new Getter<String>() {
@Override
public String get() {
return myBeforeContent;
}
});
myOldTodoTexts = new HashSet<String>();
intersection.process(Collections.singletonList(myCurrentLineFragment), new PairConsumer<LineFragment, TodoItem>() {
@Override