Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2017-01-24 10:00:16 +0000
committerPierre-Charles David2017-08-22 09:48:09 +0000
commit422ae26154673e565c48cf2ca2c730ff339eb045 (patch)
tree5779412023e93e3392654346661cc791cfe2a996
parent4d6250b153073d1ea29c88b331785a1bf2f46725 (diff)
downloadorg.eclipse.sirius-5.0.2rc1.tar.gz
org.eclipse.sirius-5.0.2rc1.tar.xz
org.eclipse.sirius-5.0.2rc1.zip
[521236] Always unload InMemoryResources to release their buffersv5.0.2rc1
Bug: 521236 Change-Id: Idbd6caf328eb3ad78a0f01c738da95e6be75cba5 Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/resource/strategy/LegacyReleaseResourceStrategyImpl.java18
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/resource/strategy/DefaultResourceStrategyImpl.java10
2 files changed, 20 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/resource/strategy/LegacyReleaseResourceStrategyImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/resource/strategy/LegacyReleaseResourceStrategyImpl.java
index b216de1cab..28ff5d9baa 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/resource/strategy/LegacyReleaseResourceStrategyImpl.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/resource/strategy/LegacyReleaseResourceStrategyImpl.java
@@ -11,23 +11,23 @@
package org.eclipse.sirius.business.api.resource.strategy;
import java.text.MessageFormat;
+import java.util.Objects;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.sirius.business.api.query.URIQuery;
import org.eclipse.sirius.viewpoint.Messages;
import org.eclipse.sirius.viewpoint.SiriusPlugin;
/**
- * This legacy implementation can be used by client who don't want the new
- * optimized behavior. They just have to contributed to {@link ResourceStrategy}
- * extension point with this class to keep the old and non optimized
+ * This legacy implementation can be used by client who don't want the new optimized behavior. They just have to
+ * contributed to {@link ResourceStrategy} extension point with this class to keep the old and non optimized
* behavior.</br>
*
- * @deprecated This class corresponds to the previous code. It will be removed
- * in a future version of Sirius (6.0.0).
+ * @deprecated This class corresponds to the previous code. It will be removed in a future version of Sirius (6.0.0).
*
* @author <a href="mailto:laurent.fasani@obeo.fr">Laurent Fasani</a>
*/
@@ -37,8 +37,12 @@ public class LegacyReleaseResourceStrategyImpl extends AbstractResourceStrategyI
@Override
public IStatus releaseResourceAtResourceSetDispose(Resource resource, IProgressMonitor monitor) {
try {
- // Don't try to unload metamodel resources.
- if (!isFromPackageRegistry(resource)) {
+ URI uri = resource.getURI();
+ if (uri != null && Objects.equals(URIQuery.INMEMORY_URI_SCHEME, uri.scheme())) {
+ // InMemory resources must be unloaded explicitly for their memory
+ // buffers to be released.
+ resource.unload();
+ } else if (!isFromPackageRegistry(resource)) {
resource.unload();
}
} catch (final IllegalStateException e) {
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/resource/strategy/DefaultResourceStrategyImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/resource/strategy/DefaultResourceStrategyImpl.java
index a97cf3f4de..fd72829dac 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/resource/strategy/DefaultResourceStrategyImpl.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/resource/strategy/DefaultResourceStrategyImpl.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.sirius.business.internal.resource.strategy;
+import java.util.Objects;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -18,6 +20,7 @@ import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.sirius.business.api.query.URIQuery;
import org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl;
import org.eclipse.sirius.viewpoint.SiriusPlugin;
@@ -36,7 +39,12 @@ public class DefaultResourceStrategyImpl extends AbstractResourceStrategyImpl {
@Override
public IStatus releaseResourceAtResourceSetDispose(Resource resource, IProgressMonitor monitor) {
// optimized implementation that avoids to unload the resource
- if (!isFromPackageRegistry(resource)) {
+ URI uri = resource.getURI();
+ if (uri != null && Objects.equals(URIQuery.INMEMORY_URI_SCHEME, uri.scheme())) {
+ // InMemory resources must be unloaded explicitly for their memory
+ // buffers to be released.
+ resource.unload();
+ } else if (!isFromPackageRegistry(resource)) {
TreeIterator<EObject> allContents = EcoreUtil.getAllProperContents(resource, false);
while (allContents.hasNext()) {
EObject eObject = allContents.next();

Back to the top