Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2014-05-02 18:30:08 +0000
committerChristian W. Damus2014-05-02 18:30:08 +0000
commit038293ea323d0fc701e6285ab0c3f131d8738681 (patch)
treebbc732a057c4369e274ec83457b851be89464425 /plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt
parentbb102e204c28c382760c37bc973f215adbbb71bb (diff)
downloadorg.eclipse.papyrus-038293ea323d0fc701e6285ab0c3f131d8738681.tar.gz
org.eclipse.papyrus-038293ea323d0fc701e6285ab0c3f131d8738681.tar.xz
org.eclipse.papyrus-038293ea323d0fc701e6285ab0c3f131d8738681.zip
422257: [Performances] Memory leaks
https://bugs.eclipse.org/bugs/show_bug.cgi?id=422257 ResourceSet clean-up in the package import wizards and common diagram utilities.
Diffstat (limited to 'plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt')
-rw-r--r--plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredPackageHandler.java52
-rw-r--r--plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredProfileHandler.java50
2 files changed, 56 insertions, 46 deletions
diff --git a/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredPackageHandler.java b/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredPackageHandler.java
index 74092b86cec..8f734ea9704 100644
--- a/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredPackageHandler.java
+++ b/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredPackageHandler.java
@@ -10,6 +10,7 @@
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
* Christian W. Damus (CEA) - Refactoring package/profile import/apply UI for CDO
* Christian W. Damus (CEA) - bug 323802
+ * Christian W. Damus (CEA) - bug 422257
*
*****************************************************************************/
package org.eclipse.papyrus.uml.importt.handlers;
@@ -25,6 +26,7 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.uml.extensionpoints.library.FilteredRegisteredLibrariesSelectionDialog;
import org.eclipse.papyrus.uml.extensionpoints.library.RegisteredLibrary;
import org.eclipse.papyrus.uml.extensionpoints.utils.Util;
@@ -50,34 +52,38 @@ public class ImportRegisteredPackageHandler extends AbstractImportHandler {
* the array of Libraries to import
*/
protected void importLibraries(RegisteredLibrary[] librariesToImport) {
- // retrieve the current resource set
+ // create a temporary resource set. Be sure to unload it so that we don't leak models in the CacheAdapter!
ResourceSet resourceSet = Util.createTemporaryResourceSet();
- for(int i = 0; i < librariesToImport.length; i++) {
- RegisteredLibrary currentLibrary = (librariesToImport[i]);
- URI modelUri = currentLibrary.uri;
-
- Resource modelResource = resourceSet.getResource(modelUri, true);
- PackageImportDialog dialog = new PackageImportDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
-
- if(dialog.open() == Window.OK) {
- Collection<ImportSpec<Package>> result = dialog.getResult();
-
- for(ImportSpec<Package> resultElement : result) {
- Package selectedPackage = resultElement.getElement();
- switch(resultElement.getAction()) {
- case COPY:
- handleCopyPackage(selectedPackage);
- break;
- case IMPORT:
- handleImportPackage(selectedPackage);
- break;
- default: //Load
- handleLoadPackage(selectedPackage);
- break;
+ try {
+ for(int i = 0; i < librariesToImport.length; i++) {
+ RegisteredLibrary currentLibrary = (librariesToImport[i]);
+ URI modelUri = currentLibrary.uri;
+
+ Resource modelResource = resourceSet.getResource(modelUri, true);
+ PackageImportDialog dialog = new PackageImportDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
+
+ if(dialog.open() == Window.OK) {
+ Collection<ImportSpec<Package>> result = dialog.getResult();
+
+ for(ImportSpec<Package> resultElement : result) {
+ Package selectedPackage = resultElement.getElement();
+ switch(resultElement.getAction()) {
+ case COPY:
+ handleCopyPackage(selectedPackage);
+ break;
+ case IMPORT:
+ handleImportPackage(selectedPackage);
+ break;
+ default: //Load
+ handleLoadPackage(selectedPackage);
+ break;
+ }
}
}
}
+ } finally {
+ EMFHelper.unload(resourceSet);;
}
}
diff --git a/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredProfileHandler.java b/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredProfileHandler.java
index 80e790c49cd..a3ee992387a 100644
--- a/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredProfileHandler.java
+++ b/plugins/uml/org.eclipse.papyrus.uml.import/src/org/eclipse/papyrus/uml/importt/handlers/ImportRegisteredProfileHandler.java
@@ -26,6 +26,7 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.uml.extensionpoints.profile.FilteredRegisteredProfilesAsLibrarySelectionDialog;
import org.eclipse.papyrus.uml.extensionpoints.profile.RegisteredProfile;
import org.eclipse.papyrus.uml.extensionpoints.utils.Util;
@@ -94,33 +95,36 @@ public class ImportRegisteredProfileHandler extends AbstractImportHandler {
*/
protected void importProfiles(RegisteredProfile[] profilesToImport) {
- // retrieve the current resource set
+ // create a temporary resource set. Be sure to unload it so that we don't leak models in the CacheAdapter!
ResourceSet resourceSet = Util.createTemporaryResourceSet();
-
- for(int i = 0; i < profilesToImport.length; i++) {
- RegisteredProfile currentLibrary = (profilesToImport[i]);
- URI modelUri = currentLibrary.uri;
-
- Resource modelResource = resourceSet.getResource(modelUri, true);
- // PackageImportTreeSelectionDialog dialog = new PackageImportTreeSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
- ProfileTreeSelectionDialog dialog = new ProfileTreeSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
- int ret = dialog.open();
-
- if(ret == Window.OK) {
- Collection<ImportSpec<Profile>> result = dialog.getResult();
- Iterator<ImportSpec<Profile>> resultIter = result.iterator();
- while(resultIter.hasNext()) {
- Package element = resultIter.next().getElement();
- PackageImport ei = UMLFactory.eINSTANCE.createPackageImport();
- ei.setImportedPackage(element);
-
- //we import only once an element :
- List<Package> importedPackages = ((Package)getSelectedElement()).getImportedPackages();
- if(!importedPackages.contains(element)) {
- ((Package)getSelectedElement()).getPackageImports().add(ei);
+ try {
+ for(int i = 0; i < profilesToImport.length; i++) {
+ RegisteredProfile currentLibrary = (profilesToImport[i]);
+ URI modelUri = currentLibrary.uri;
+
+ Resource modelResource = resourceSet.getResource(modelUri, true);
+ // PackageImportTreeSelectionDialog dialog = new PackageImportTreeSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
+ ProfileTreeSelectionDialog dialog = new ProfileTreeSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), ((Package)modelResource.getContents().get(0)));
+ int ret = dialog.open();
+
+ if(ret == Window.OK) {
+ Collection<ImportSpec<Profile>> result = dialog.getResult();
+ Iterator<ImportSpec<Profile>> resultIter = result.iterator();
+ while(resultIter.hasNext()) {
+ Package element = resultIter.next().getElement();
+ PackageImport ei = UMLFactory.eINSTANCE.createPackageImport();
+ ei.setImportedPackage(element);
+
+ //we import only once an element :
+ List<Package> importedPackages = ((Package)getSelectedElement()).getImportedPackages();
+ if(!importedPackages.contains(element)) {
+ ((Package)getSelectedElement()).getPackageImports().add(ei);
+ }
}
}
}
+ } finally {
+ EMFHelper.unload(resourceSet);
}
}

Back to the top