We know that fileAnnotation.getRevisions() are sorted properly, while old comparator could return invalid result (ex: for commits with the same timestamp in git)
import com.intellij.openapi.vcs.impl.UpToDateLineNumberProviderImpl;
import com.intellij.openapi.vcs.impl.VcsBackgroundableActions;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vcs.impl.UpToDateLineNumberProviderImpl;
import com.intellij.openapi.vcs.impl.VcsBackgroundableActions;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.containers.SortedList;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
final Couple<Map<VcsRevisionNumber, Color>> bgColorMap =
Registry.is("vcs.show.colored.annotations") ? computeBgColors(fileAnnotation) : null;
final Couple<Map<VcsRevisionNumber, Color>> bgColorMap =
Registry.is("vcs.show.colored.annotations") ? computeBgColors(fileAnnotation) : null;
- final Map<String, Integer> historyIds = Registry.is("vcs.show.history.numbers") ? computeLineNumbers(fileAnnotation) : null;
+ final Map<VcsRevisionNumber, Integer> historyIds = Registry.is("vcs.show.history.numbers") ? computeLineNumbers(fileAnnotation) : null;
if (switcher != null) {
switcher.switchTo(switcher.getDefaultSource());
if (switcher != null) {
switcher.switchTo(switcher.getDefaultSource());
- private static Map<String, Integer> computeLineNumbers(@NotNull FileAnnotation fileAnnotation) {
- final SortedList<VcsFileRevision> revisions = new SortedList<VcsFileRevision>(new Comparator<VcsFileRevision>() {
- @Override
- public int compare(VcsFileRevision o1, VcsFileRevision o2) {
- try {
- final int result = o1.getRevisionDate().compareTo(o2.getRevisionDate());
- return result != 0 ? result : o1.getRevisionNumber().compareTo(o2.getRevisionNumber());
- }
- catch (Exception e) {
- return 0;
- }
- }
- });
- final Map<String, Integer> numbers = new HashMap<String, Integer>();
+ private static Map<VcsRevisionNumber, Integer> computeLineNumbers(@NotNull FileAnnotation fileAnnotation) {
+ final Map<VcsRevisionNumber, Integer> numbers = new HashMap<VcsRevisionNumber, Integer>();
final List<VcsFileRevision> fileRevisionList = fileAnnotation.getRevisions();
if (fileRevisionList != null) {
final List<VcsFileRevision> fileRevisionList = fileAnnotation.getRevisions();
if (fileRevisionList != null) {
- revisions.addAll(fileRevisionList);
- for (VcsFileRevision revision : fileRevisionList) {
- final String revNumber = revision.getRevisionNumber().asString();
- if (!numbers.containsKey(revNumber)) {
- final int num = revisions.indexOf(revision);
- if (num != -1) {
- numbers.put(revNumber, num + 1);
- }
- }
+ int size = fileRevisionList.size();
+ for (int i = 0; i < size; i++) {
+ VcsFileRevision revision = fileRevisionList.get(i);
+ final VcsRevisionNumber number = revision.getRevisionNumber();
+
+ numbers.put(number, size - i);
}
}
return numbers.size() < 2 ? null : numbers;
}
}
return numbers.size() < 2 ? null : numbers;
* @author Konstantin Bulenkov
*/
class HistoryIdColumn extends AnnotationFieldGutter {
* @author Konstantin Bulenkov
*/
class HistoryIdColumn extends AnnotationFieldGutter {
- private final Map<String, Integer> myHistoryIds;
+ private final Map<VcsRevisionNumber, Integer> myHistoryIds;
HistoryIdColumn(FileAnnotation annotation,
final Editor editor,
final TextAnnotationPresentation presentation,
Couple<Map<VcsRevisionNumber, Color>> colorScheme,
HistoryIdColumn(FileAnnotation annotation,
final Editor editor,
final TextAnnotationPresentation presentation,
Couple<Map<VcsRevisionNumber, Color>> colorScheme,
- Map<String, Integer> ids) {
+ Map<VcsRevisionNumber, Integer> ids) {
super(annotation, editor, null, presentation, colorScheme);
myHistoryIds = ids;
}
super(annotation, editor, null, presentation, colorScheme);
myHistoryIds = ids;
}
if (!isAvailable()) return "";
final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(line);
if (revisionNumber != null) {
if (!isAvailable()) return "";
final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(line);
if (revisionNumber != null) {
- final Integer num = myHistoryIds.get(revisionNumber.asString());
+ final Integer num = myHistoryIds.get(revisionNumber);
if (num != null) {
final String size = String.valueOf(myHistoryIds.size());
String value = num.toString();
if (num != null) {
final String size = String.valueOf(myHistoryIds.size());
String value = num.toString();