diff options
author | Pierre-Charles David | 2017-01-24 10:00:16 +0000 |
---|---|---|
committer | Pierre-Charles David | 2017-08-22 09:48:09 +0000 |
commit | 422ae26154673e565c48cf2ca2c730ff339eb045 (patch) | |
tree | 5779412023e93e3392654346661cc791cfe2a996 | |
parent | 4d6250b153073d1ea29c88b331785a1bf2f46725 (diff) | |
download | org.eclipse.sirius-5.0.2rc1.tar.gz org.eclipse.sirius-5.0.2rc1.tar.xz org.eclipse.sirius-5.0.2rc1.zip |
Bug: 521236
Change-Id: Idbd6caf328eb3ad78a0f01c738da95e6be75cba5
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
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(); |