diff options
author | Martin Fluegge | 2011-05-23 18:40:50 +0000 |
---|---|---|
committer | Martin Fluegge | 2011-05-23 18:40:50 +0000 |
commit | 41769fc44fb267231d5902d51c2eeb82c0bdcafa (patch) | |
tree | a99450355fc2e1bd56a7482ccadb14adfbb81f0f /plugins/org.eclipse.emf.cdo | |
parent | e45cb99b889adbe84e340a537bb93b4ade0c511f (diff) | |
download | cdo-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.java | 43 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java | 1 |
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() |