Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2014-11-15 15:59:32 +0000
committerChristian W. Damus2014-11-15 15:59:32 +0000
commit4ce552bd5e30f589bd4ad3e313db3b573a73089c (patch)
treea7bff60f24e89304e3359f5709e8bf53c2a010ef /plugins/views
parentd0557a86e852fd7ae0d3d428380d2fdf9b3733d5 (diff)
downloadorg.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')
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerPageBookView.java16
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java21
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

Back to the top