Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2013-03-18 11:24:32 +0000
committerEike Stepper2013-03-18 11:24:32 +0000
commitf8cbd61bb2875664281ab37f54ca58c02b1775ef (patch)
tree9e73632435350804edb72985b6021dfba66737f5 /plugins/org.eclipse.emf.cdo.compare
parent5991889c5ff1a0745f52d23255bb6904c18cdf33 (diff)
downloadcdo-f8cbd61bb2875664281ab37f54ca58c02b1775ef.tar.gz
cdo-f8cbd61bb2875664281ab37f54ca58c02b1775ef.tar.xz
cdo-f8cbd61bb2875664281ab37f54ca58c02b1775ef.zip
[402371] CDOCompareUtil.compare fails with models that use Containment
Proxies https://bugs.eclipse.org/bugs/show_bug.cgi?id=402371
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.compare')
-rw-r--r--plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOComparisonScope.java38
1 files changed, 32 insertions, 6 deletions
diff --git a/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOComparisonScope.java b/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOComparisonScope.java
index 4350fa6783..e9b9b5f529 100644
--- a/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOComparisonScope.java
+++ b/plugins/org.eclipse.emf.cdo.compare/src/org/eclipse/emf/cdo/compare/CDOComparisonScope.java
@@ -34,6 +34,8 @@ import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.EcoreUtil.ProperContentIterator;
import org.eclipse.emf.spi.cdo.InternalCDOSession;
import org.eclipse.emf.spi.cdo.InternalCDOSession.MergeData;
@@ -51,6 +53,8 @@ import java.util.Set;
*/
public abstract class CDOComparisonScope extends AbstractComparisonScope
{
+ private boolean resolveProxies = true;
+
public CDOComparisonScope(Notifier left, Notifier right, Notifier origin)
{
super(left, right, origin);
@@ -66,6 +70,16 @@ public abstract class CDOComparisonScope extends AbstractComparisonScope
return Iterators.emptyIterator();
}
+ public final boolean isResolveProxies()
+ {
+ return resolveProxies;
+ }
+
+ public final void setResolveProxies(boolean resolveProxies)
+ {
+ this.resolveProxies = resolveProxies;
+ }
+
private static CDOView openOriginView(CDOView leftView, CDOView rightView, CDOView[] originView)
{
if (leftView.getSession() != rightView.getSession())
@@ -117,7 +131,7 @@ public abstract class CDOComparisonScope extends AbstractComparisonScope
public Iterator<? extends EObject> getChildren(EObject eObject)
{
- return eObject.eAllContents();
+ return EcoreUtil.getAllProperContents(eObject, isResolveProxies());
}
/**
@@ -181,7 +195,14 @@ public abstract class CDOComparisonScope extends AbstractComparisonScope
@Override
public Iterator<EObject> getChildren(Object object)
{
- return Iterators.filter(((EObject)object).eContents().iterator(), Minimal.this);
+ if (object instanceof Resource)
+ {
+ Iterator<EObject> iterator = ((Resource)object).getContents().iterator();
+ return Iterators.filter(iterator, Minimal.this);
+ }
+
+ Iterator<EObject> iterator = new ProperContentIterator<EObject>((EObject)object, isResolveProxies());
+ return Iterators.filter(iterator, Minimal.this);
}
};
}
@@ -209,11 +230,16 @@ public abstract class CDOComparisonScope extends AbstractComparisonScope
CDORevisionData revisionData = object.cdoRevision().data();
- CDOID containerID = (CDOID)revisionData.getContainerID();
- collectRequiredParentIDs(view, containerID, requiredParentIDs);
-
CDOID resourceID = revisionData.getResourceID();
- collectRequiredParentIDs(view, resourceID, requiredParentIDs);
+ if (!CDOIDUtil.isNull(resourceID))
+ {
+ collectRequiredParentIDs(view, resourceID, requiredParentIDs);
+ }
+ else
+ {
+ CDOID containerID = (CDOID)revisionData.getContainerID();
+ collectRequiredParentIDs(view, containerID, requiredParentIDs);
+ }
}
private void collectRequiredParentIDs(CDOView view, CDOID id, Set<CDOID> requiredParentIDs)

Back to the top