mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lst: pass Editor to RangeMarkerAction
Check, that editor is not disposed yet: EA-114231 - TDDE: TraceableDisposable.throwDisposalError
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+23
-27
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user