From feb9141c6017ca80846b3eb8a80ab9eb19c7b26f Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 25 Mar 2015 20:16:28 +0300 Subject: [PATCH] vcs: fix "Annotate [Previous|Current] Revision" from annotations for locally modified files convert line number using LineStatusTracker --- .../vcs/actions/AnnotateCurrentRevisionAction.java | 6 ++++-- .../vcs/actions/AnnotatePreviousRevisionAction.java | 6 ++++-- .../openapi/vcs/actions/AnnotateRevisionAction.java | 12 ++++++++++-- .../openapi/vcs/actions/AnnotateToggleAction.java | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateCurrentRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateCurrentRevisionAction.java index 0d8eda07fcb1..70948840a98b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateCurrentRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateCurrentRevisionAction.java @@ -1,6 +1,7 @@ package com.intellij.openapi.vcs.actions; import com.intellij.icons.AllIcons; +import com.intellij.openapi.localVcs.UpToDateLineNumberProvider; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.annotate.FileAnnotation; import com.intellij.openapi.vcs.history.VcsFileRevision; @@ -16,9 +17,10 @@ import java.util.Map; class AnnotateCurrentRevisionAction extends AnnotateRevisionAction { @Nullable private final List myRevisions; - public AnnotateCurrentRevisionAction(@NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) { + public AnnotateCurrentRevisionAction(@NotNull UpToDateLineNumberProvider getUpToDateLineNumber, + @NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) { super("Annotate Revision", "Annotate selected revision in new tab", AllIcons.Actions.Annotate, - annotation, vcs); + getUpToDateLineNumber, annotation, vcs); List revisions = annotation.getRevisions(); if (revisions == null) { myRevisions = null; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotatePreviousRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotatePreviousRevisionAction.java index 476f63865f6a..30b48de9f7c7 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotatePreviousRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotatePreviousRevisionAction.java @@ -1,6 +1,7 @@ package com.intellij.openapi.vcs.actions; import com.intellij.icons.AllIcons; +import com.intellij.openapi.localVcs.UpToDateLineNumberProvider; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.annotate.FileAnnotation; import com.intellij.openapi.vcs.history.VcsFileRevision; @@ -16,9 +17,10 @@ import java.util.Map; class AnnotatePreviousRevisionAction extends AnnotateRevisionAction { @Nullable private final List myRevisions; - public AnnotatePreviousRevisionAction(@NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) { + public AnnotatePreviousRevisionAction(@NotNull UpToDateLineNumberProvider getUpToDateLineNumber, + @NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) { super("Annotate Previous Revision", "Annotate successor of selected revision in new tab", AllIcons.Actions.Annotate, - annotation, vcs); + getUpToDateLineNumber, annotation, vcs); List revisions = annotation.getRevisions(); if (revisions == null) { myRevisions = null; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java index aa61855cd802..f87aad0ee368 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java @@ -1,6 +1,7 @@ package com.intellij.openapi.vcs.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.localVcs.UpToDateLineNumberProvider; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.FilePath; @@ -19,14 +20,18 @@ import javax.swing.*; import java.util.List; abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase implements DumbAware, LineNumberListener { + private final UpToDateLineNumberProvider myGetUpToDateLineNumber; + @NotNull private final FileAnnotation myAnnotation; @NotNull private final AbstractVcs myVcs; private int currentLine; public AnnotateRevisionAction(@Nullable String text, @Nullable String description, @Nullable Icon icon, + @NotNull UpToDateLineNumberProvider getUpToDateLineNumber, @NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) { super(text, description, icon); + myGetUpToDateLineNumber = getUpToDateLineNumber; myAnnotation = annotation; myVcs = vcs; } @@ -67,8 +72,11 @@ abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase impleme List revisions = getRevisions(); assert getRevisions() != null; - if (currentLine < 0 || currentLine >= revisions.size()) return null; - return revisions.get(currentLine); + if (currentLine < 0) return null; + int corrected = myGetUpToDateLineNumber.getLineNumber(currentLine); + + if (corrected < 0 || corrected >= revisions.size()) return null; + return revisions.get(corrected); } @Override diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java index 57ee9dc78b83..09e1a879f9e7 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java @@ -299,8 +299,8 @@ public class AnnotateToggleAction extends ToggleAction implements DumbAware, Ann presentation.addAction(actionGroup, 1); gutters.add(new ExtraFieldGutter(fileAnnotation, editor, presentation, bgColorMap, actionGroup)); - presentation.addAction(new AnnotateCurrentRevisionAction(fileAnnotation, vcs)); - presentation.addAction(new AnnotatePreviousRevisionAction(fileAnnotation, vcs)); + presentation.addAction(new AnnotateCurrentRevisionAction(getUpToDateLineNumber, fileAnnotation, vcs)); + presentation.addAction(new AnnotatePreviousRevisionAction(getUpToDateLineNumber, fileAnnotation, vcs)); addActionsFromExtensions(presentation, fileAnnotation); for (AnAction action : presentation.getActions()) {