Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Fluegge2011-05-23 18:40:50 +0000
committerMartin Fluegge2011-05-23 18:40:50 +0000
commit41769fc44fb267231d5902d51c2eeb82c0bdcafa (patch)
treea99450355fc2e1bd56a7482ccadb14adfbb81f0f /plugins/org.eclipse.emf.cdo
parente45cb99b889adbe84e340a537bb93b4ade0c511f (diff)
downloadcdo-41769fc44fb267231d5902d51c2eeb82c0bdcafa.tar.gz
cdo-41769fc44fb267231d5902d51c2eeb82c0bdcafa.tar.xz
cdo-41769fc44fb267231d5902d51c2eeb82c0bdcafa.zip
[346636] Root resource should not be contained in resource set
https://bugs.eclipse.org/bugs/show_bug.cgi?id=346636
Diffstat (limited to 'plugins/org.eclipse.emf.cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/SessionUtil.java43
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java1
2 files changed, 43 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/SessionUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/SessionUtil.java
index d50bc45cdf..23d95c6c60 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/SessionUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/SessionUtil.java
@@ -10,10 +10,14 @@
*/
package org.eclipse.emf.internal.cdo.session;
+import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.internal.cdo.view.CDOViewSetImpl;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.spi.cdo.InternalCDOViewSet;
@@ -22,6 +26,8 @@ import org.eclipse.emf.spi.cdo.InternalCDOViewSet;
*/
public final class SessionUtil
{
+ private static final boolean ROOT_RESOURCE_EXCLUSION_CHECK = false;
+
private SessionUtil()
{
}
@@ -34,6 +40,11 @@ public final class SessionUtil
InternalCDOViewSet viewSet = null;
synchronized (resourceSet)
{
+ if (ROOT_RESOURCE_EXCLUSION_CHECK)
+ {
+ addRootResourceExclusionCheckAdapter(resourceSet);
+ }
+
viewSet = (InternalCDOViewSet)CDOUtil.getViewSet(resourceSet);
if (viewSet == null)
{
@@ -44,4 +55,36 @@ public final class SessionUtil
return viewSet;
}
+
+ private static void addRootResourceExclusionCheckAdapter(ResourceSet resourceSet)
+ {
+ class RootResourceExclusionCheckAdapter extends AdapterImpl
+ {
+ @Override
+ public void notifyChanged(Notification msg)
+ {
+ if (msg.getEventType() == Notification.ADD || msg.getEventType() == Notification.ADD_MANY)
+ {
+ Object newValue = msg.getNewValue();
+ check(newValue);
+ }
+ }
+
+ @Override
+ public void setTarget(Notifier newTarget)
+ {
+ check(newTarget);
+ }
+
+ private void check(Object object)
+ {
+ if (object instanceof CDOResource && ((CDOResource)object).isRoot())
+ {
+ throw new AssertionError("Root resource in resource set not allowed");
+ }
+ }
+ }
+
+ resourceSet.eAdapters().add(new RootResourceExclusionCheckAdapter());
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
index 8c3c75070d..bfa2d97394 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
@@ -220,7 +220,6 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi
rootResource = resource;
rootResource.setRoot(true);
registerObject(rootResource);
- getResourceSet().getResources().add(rootResource);
}
public CDOURIHandler getURIHandler()

Back to the top