IDEA-88479 "Copy revision number" puts a wrong revision to clipboard after you delete lines above

This commit is contained in:
irengrig
2012-07-26 15:15:49 +04:00
parent 47ef79d568
commit ad008b79ee
2 changed files with 11 additions and 4 deletions
@@ -203,7 +203,7 @@ public class AnnotateToggleAction extends ToggleAction implements DumbAware, Ann
if (vcs.getCommittedChangesProvider() != null) {
additionalActions.add(new ShowDiffFromAnnotation(getUpToDateLineNumber, fileAnnotation, vcs, file));
}
additionalActions.add(new CopyRevisionNumberAction(fileAnnotation));
additionalActions.add(new CopyRevisionNumberAction(getUpToDateLineNumber, fileAnnotation));
final AnnotationPresentation presentation =
new AnnotationPresentation(highlighting, switcher, editorGutter, gutters,
additionalActions.toArray(new AnAction[additionalActions.size()]));
@@ -18,6 +18,7 @@ package com.intellij.openapi.vcs.actions;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.localVcs.UpToDateLineNumberProvider;
import com.intellij.openapi.vcs.annotate.FileAnnotation;
import com.intellij.openapi.vcs.annotate.LineNumberListener;
import com.intellij.openapi.vcs.history.TextTransferrable;
@@ -27,17 +28,21 @@ import com.intellij.openapi.vcs.history.VcsRevisionNumber;
* @author Konstantin Bulenkov
*/
public class CopyRevisionNumberAction extends AnAction implements LineNumberListener {
private final UpToDateLineNumberProvider myGetUpToDateLineNumber;
private final FileAnnotation myAnnotation;
private int myLineNumber = -1;
public CopyRevisionNumberAction(FileAnnotation annotation) {
public CopyRevisionNumberAction(UpToDateLineNumberProvider getUpToDateLineNumber, FileAnnotation annotation) {
super("Copy revision number");
myGetUpToDateLineNumber = getUpToDateLineNumber;
myAnnotation = annotation;
}
@Override
public void actionPerformed(AnActionEvent e) {
final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(myLineNumber);
if (myLineNumber < 0) return;
final int corrected = myGetUpToDateLineNumber.getLineNumber(myLineNumber);
final VcsRevisionNumber revisionNumber = myAnnotation.getLineRevisionNumber(corrected);
if (revisionNumber != null) {
final String revision = revisionNumber.asString();
CopyPasteManager.getInstance().setContents(new TextTransferrable(revision, revision));
@@ -46,7 +51,9 @@ public class CopyRevisionNumberAction extends AnAction implements LineNumberList
@Override
public void update(AnActionEvent e) {
final boolean enabled = myLineNumber != -1 && myAnnotation.getLineRevisionNumber(myLineNumber) != null;
int corrected = myLineNumber;
final boolean enabled = myLineNumber >= 0 && (corrected = myGetUpToDateLineNumber.getLineNumber(myLineNumber)) >= 0 &&
myAnnotation.getLineRevisionNumber(corrected) != null;
e.getPresentation().setEnabled(enabled);
e.getPresentation().setVisible(enabled);
}