lst: pass Editor to RangeMarkerAction

Check, that editor is not disposed yet:
EA-114231 - TDDE: TraceableDisposable.throwDisposalError
This commit is contained in:
Aleksey Pivovarov
2017-12-25 17:06:50 +03:00
parent e211a117ad
commit 3569c4d1a2
4 changed files with 35 additions and 39 deletions
@@ -1320,8 +1320,8 @@ public class TextMergeViewer implements MergeTool.MergeViewer {
List<AnAction> actions = new ArrayList<>();
actions.add(new ShowPrevChangeMarkerAction(editor, range));
actions.add(new ShowNextChangeMarkerAction(editor, range));
actions.add(new ShowLineStatusRangeDiffAction(range));
actions.add(new CopyLineStatusRangeAction(range));
actions.add(new ShowLineStatusRangeDiffAction(editor, range));
actions.add(new CopyLineStatusRangeAction(editor, range));
actions.add(new ToggleByWordDiffAction(editor, range, mousePosition));
return actions;
}
@@ -418,98 +418,94 @@ public abstract class LineStatusMarkerPopupRenderer extends LineStatusMarkerRend
protected abstract class RangeMarkerAction extends DumbAwareAction {
@NotNull private final Range myRange;
@NotNull private final Editor myEditor;
public RangeMarkerAction(@NotNull Range range, @NotNull String actionId) {
public RangeMarkerAction(@NotNull Editor editor, @NotNull Range range, @NotNull String actionId) {
myRange = range;
myEditor = editor;
ActionUtil.copyFrom(this, actionId);
}
@Override
public void update(AnActionEvent e) {
Range newRange = myTracker.findRange(myRange);
e.getPresentation().setEnabled(newRange != null && isEnabled(newRange));
e.getPresentation().setEnabled(newRange != null && !myEditor.isDisposed() && isEnabled(myEditor, newRange));
}
@Override
public void actionPerformed(AnActionEvent e) {
Range newRange = myTracker.findRange(myRange);
if (newRange != null) actionPerformed(newRange);
if (newRange != null) actionPerformed(myEditor, newRange);
}
protected abstract boolean isEnabled(@NotNull Range range);
protected abstract boolean isEnabled(@NotNull Editor editor, @NotNull Range range);
protected abstract void actionPerformed(@NotNull Range range);
protected abstract void actionPerformed(@NotNull Editor editor, @NotNull Range range);
}
public class ShowNextChangeMarkerAction extends RangeMarkerAction {
@NotNull private final Editor myEditor;
public ShowNextChangeMarkerAction(@NotNull Editor editor, @NotNull Range range) {
super(range, "VcsShowNextChangeMarker");
myEditor = editor;
super(editor, range, "VcsShowNextChangeMarker");
}
@Override
protected boolean isEnabled(@NotNull Range range) {
protected boolean isEnabled(@NotNull Editor editor, @NotNull Range range) {
return myTracker.getNextRange(range.getLine1()) != null;
}
@Override
protected void actionPerformed(@NotNull Range range) {
protected void actionPerformed(@NotNull Editor editor, @NotNull Range range) {
Range targetRange = myTracker.getNextRange(range.getLine1());
if (targetRange != null) LineStatusMarkerPopupRenderer.this.scrollAndShow(myEditor, targetRange);
if (targetRange != null) LineStatusMarkerPopupRenderer.this.scrollAndShow(editor, targetRange);
}
}
public class ShowPrevChangeMarkerAction extends RangeMarkerAction {
@NotNull private final Editor myEditor;
public ShowPrevChangeMarkerAction(@NotNull Editor editor, @NotNull Range range) {
super(range, "VcsShowPrevChangeMarker");
myEditor = editor;
super(editor, range, "VcsShowPrevChangeMarker");
}
@Override
protected boolean isEnabled(@NotNull Range range) {
protected boolean isEnabled(@NotNull Editor editor, @NotNull Range range) {
return myTracker.getPrevRange(range.getLine1()) != null;
}
@Override
protected void actionPerformed(@NotNull Range range) {
protected void actionPerformed(@NotNull Editor editor, @NotNull Range range) {
Range targetRange = myTracker.getPrevRange(range.getLine1());
if (targetRange != null) LineStatusMarkerPopupRenderer.this.scrollAndShow(myEditor, targetRange);
if (targetRange != null) LineStatusMarkerPopupRenderer.this.scrollAndShow(editor, targetRange);
}
}
public class CopyLineStatusRangeAction extends RangeMarkerAction {
public CopyLineStatusRangeAction(@NotNull Range range) {
super(range, IdeActions.ACTION_COPY);
public CopyLineStatusRangeAction(@NotNull Editor editor, @NotNull Range range) {
super(editor, range, IdeActions.ACTION_COPY);
}
@Override
protected boolean isEnabled(@NotNull Range range) {
protected boolean isEnabled(@NotNull Editor editor, @NotNull Range range) {
return Range.DELETED == range.getType() || Range.MODIFIED == range.getType();
}
@Override
protected void actionPerformed(@NotNull Range range) {
protected void actionPerformed(@NotNull Editor editor, @NotNull Range range) {
final String content = getVcsContent(range) + "\n";
CopyPasteManager.getInstance().setContents(new StringSelection(content));
}
}
public class ShowLineStatusRangeDiffAction extends RangeMarkerAction {
public ShowLineStatusRangeDiffAction(@NotNull Range range) {
super(range, IdeActions.ACTION_SHOW_DIFF_COMMON);
public ShowLineStatusRangeDiffAction(@NotNull Editor editor, @NotNull Range range) {
super(editor, range, IdeActions.ACTION_SHOW_DIFF_COMMON);
}
@Override
protected boolean isEnabled(@NotNull Range range) {
protected boolean isEnabled(@NotNull Editor editor, @NotNull Range range) {
return true;
}
@Override
protected void actionPerformed(@NotNull Range range) {
protected void actionPerformed(@NotNull Editor editor, @NotNull Range range) {
Range ourRange = expand(range, myTracker.getDocument(), myTracker.getVcsDocument());
DiffContent vcsContent = createDiffContent(myTracker.getVcsDocument(),
@@ -114,19 +114,19 @@ abstract class LineStatusTracker<R : Range> constructor(override val project: Pr
actions.add(ShowPrevChangeMarkerAction(editor, range))
actions.add(ShowNextChangeMarkerAction(editor, range))
actions.add(RollbackLineStatusRangeAction(editor, range))
actions.add(ShowLineStatusRangeDiffAction(range))
actions.add(CopyLineStatusRangeAction(range))
actions.add(ShowLineStatusRangeDiffAction(editor, range))
actions.add(CopyLineStatusRangeAction(editor, range))
actions.add(ToggleByWordDiffAction(editor, range, mousePosition))
return actions
}
override fun getFileType(): FileType = tracker.virtualFile.fileType
private inner class RollbackLineStatusRangeAction(private val editor: Editor, range: Range)
: RangeMarkerAction(range, IdeActions.SELECTED_CHANGES_ROLLBACK) {
override fun isEnabled(range: Range): Boolean = true
private inner class RollbackLineStatusRangeAction(editor: Editor, range: Range)
: RangeMarkerAction(editor, range, IdeActions.SELECTED_CHANGES_ROLLBACK) {
override fun isEnabled(editor: Editor, range: Range): Boolean = true
override fun actionPerformed(range: Range) {
override fun actionPerformed(editor: Editor, range: Range) {
RollbackLineStatusAction.rollback(tracker, range, editor)
}
}
@@ -417,11 +417,11 @@ class PartialLocalLineStatusTracker(project: Project,
return actions
}
private inner class SetChangeListAction(val editor: Editor, range: Range, val mousePosition: Point?)
: RangeMarkerAction(range, IdeActions.MOVE_TO_ANOTHER_CHANGE_LIST) {
override fun isEnabled(range: Range): Boolean = range is LocalRange
private inner class SetChangeListAction(editor: Editor, range: Range, val mousePosition: Point?)
: RangeMarkerAction(editor, range, IdeActions.MOVE_TO_ANOTHER_CHANGE_LIST) {
override fun isEnabled(editor: Editor, range: Range): Boolean = range is LocalRange
override fun actionPerformed(range: Range) {
override fun actionPerformed(editor: Editor, range: Range) {
MoveChangesLineStatusAction.moveToAnotherChangelist(tracker, range as LocalRange)
val newRange = tracker.findRange(range)