diff options
author | Christian W. Damus | 2014-11-15 15:59:32 +0000 |
---|---|---|
committer | Christian W. Damus | 2014-11-15 15:59:32 +0000 |
commit | 4ce552bd5e30f589bd4ad3e313db3b573a73089c (patch) | |
tree | a7bff60f24e89304e3359f5709e8bf53c2a010ef /plugins/views | |
parent | d0557a86e852fd7ae0d3d428380d2fdf9b3733d5 (diff) | |
download | org.eclipse.papyrus-4ce552bd5e30f589bd4ad3e313db3b573a73089c.tar.gz org.eclipse.papyrus-4ce552bd5e30f589bd4ad3e313db3b573a73089c.tar.xz org.eclipse.papyrus-4ce552bd5e30f589bd4ad3e313db3b573a73089c.zip |
451683: Memory leak in stereotype repair
https://bugs.eclipse.org/bugs/show_bug.cgi?id=451683
Fix memory leaks in:
- the common navigator framework (Model Explorer)
- the Papyrus EMF Facet tree content provider (Model Explorer)
- the GMF diagram outline page (SynchronizableGmfDiagramEditor)
Diffstat (limited to 'plugins/views')
2 files changed, 33 insertions, 4 deletions
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerPageBookView.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerPageBookView.java index 3c06078c1ef..0e8b907ba4e 100644 --- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerPageBookView.java +++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerPageBookView.java @@ -12,7 +12,8 @@ * Ansgar Radermacher (CEA) ansgar.radermacher@cea.fr - Added support for IGotoMarker * Christian W. Damus (CEA) - bug 434635 * Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Bug 431117 - * Christian W. Damus - bug 450536 + * Christian W. Damus - bug 450536 + * Christian W. Damus - bug 451683 * *****************************************************************************/ @@ -128,4 +129,17 @@ public class ModelExplorerPageBookView extends MultiViewPageBookView implements super.saveState(memento); } + + @Override + public void partClosed(IWorkbenchPart part) { + PageRec rec = getPageRec(part); + if ((rec != null) && (rec.page instanceof ModelExplorerPage)) { + ModelExplorerView explorer = (ModelExplorerView) ((ModelExplorerPage) rec.page).getViewer(); + + // Clear the explorer tree input to prompt the CNF to clear caches, promoting garbage collection + explorer.aboutToDispose(); + } + + super.partClosed(part); + } } diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java index 5a31085bcf6..5012c5794f5 100644 --- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java +++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java @@ -14,6 +14,7 @@ * Christian W. Damus (CEA) - bug 437217
* Christian W. Damus (CEA) - bug 441857
* Christian W. Damus - bug 450235
+ * Christian W. Damus - bug 451683
*
*****************************************************************************/
package org.eclipse.papyrus.views.modelexplorer;
@@ -26,7 +27,6 @@ import java.util.Collections; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.core.commands.operations.IUndoContext;
@@ -110,13 +110,12 @@ import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.internal.navigator.NavigatorContentService;
-import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.navigator.CommonViewerSorter;
import org.eclipse.ui.navigator.IExtensionActivationListener;
import org.eclipse.ui.navigator.ILinkHelper;
+import org.eclipse.ui.navigator.INavigatorContentService;
import org.eclipse.ui.navigator.LinkHelperService;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.properties.IPropertySheetPage;
@@ -907,6 +906,22 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti }
/**
+ * Invoked internally to clear the common viewer's associate listener in order to promote garbage collection.
+ */
+ void aboutToDispose() {
+ final CommonViewer viewer = getCommonViewer();
+ if ((viewer.getTree() != null) && !viewer.getTree().isDisposed()) {
+ viewer.setInput(null);
+
+ // Kick the NavigatorContentService to clear the cache in its StructuredViewerManager that leaks all of our tree elements
+ INavigatorContentService contentService = getNavigatorContentService();
+ if (contentService instanceof IExtensionActivationListener) {
+ ((IExtensionActivationListener) getNavigatorContentService()).onExtensionActivation(contentService.getViewerId(), new String[0], false);
+ }
+ }
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
|