From 9b760e6b8ed44e28952c16cda749a948f266d6f5 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 29 May 2013 17:44:57 +0200 Subject: [PATCH] don't leak project via action listener in change list browser (IDEA-107996) --- .../openapi/vcs/changes/ui/CommitChangeListDialog.java | 2 +- .../openapi/vcs/changes/ui/MultipleChangeListBrowser.java | 6 +++++- .../openapi/vcs/changes/ui/RollbackChangesDialog.java | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java index 97b887a0cdae..961426976063 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java @@ -261,7 +261,7 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj myBrowser = browser; myBrowserExtender = browser; } else { - MultipleChangeListBrowser browser = new MultipleChangeListBrowser(project, changeLists, changes, initialSelection, true, true, + MultipleChangeListBrowser browser = new MultipleChangeListBrowser(project, changeLists, changes, getDisposable(), initialSelection, true, true, new Runnable() { public void run() { updateWarning(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java index 7d827639f464..4f04f85f4dc7 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/MultipleChangeListBrowser.java @@ -23,6 +23,7 @@ package com.intellij.openapi.vcs.changes.ui; import com.intellij.icons.AllIcons; +import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.AnActionListener; import com.intellij.openapi.application.ApplicationManager; @@ -58,15 +59,18 @@ public class MultipleChangeListBrowser extends ChangesBrowser { private Map myChangeListsMap; private final ChangesBrowserExtender myExtender; + private final Disposable myParentDisposable; private final Runnable myRebuildListListener; // todo terrible constructor public MultipleChangeListBrowser(final Project project, final List changeLists, final List changes, + Disposable parentDisposable, final ChangeList initialListSelection, final boolean capableOfExcludingChanges, final boolean highlightProblems, final Runnable rebuildListListener, @Nullable final Runnable inclusionListener, final AnAction... additionalActions) { super(project, changeLists, changes, initialListSelection, capableOfExcludingChanges, highlightProblems, inclusionListener, MyUseCase.LOCAL_CHANGES, null); + myParentDisposable = parentDisposable; myRebuildListListener = rebuildListListener; myChangeListChooser = new ChangeListChooser(changeLists); @@ -215,7 +219,7 @@ public class MultipleChangeListBrowser extends ChangesBrowser { rebuildList(); } } - }); + }, myParentDisposable); moveAction.registerCustomShortcutSet(CommonShortcuts.getMove(), myViewer); toolBarGroup.add(moveAction); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackChangesDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackChangesDialog.java index 80d92b8c0ce1..4aee9d3c9561 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackChangesDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/RollbackChangesDialog.java @@ -104,7 +104,7 @@ public class RollbackChangesDialog extends DialogWrapper { } } }; - myBrowser = new MultipleChangeListBrowser(project, changeLists, changes, null, true, true, myListChangeListener, myListChangeListener); + myBrowser = new MultipleChangeListBrowser(project, changeLists, changes, getDisposable(), null, true, true, myListChangeListener, myListChangeListener); myOperationName = operationNameByChanges(project, changes); setOKButtonText(myOperationName);