diff options
author | Eike Stepper | 2013-03-18 11:24:32 +0000 |
---|---|---|
committer | Eike Stepper | 2013-03-18 11:24:32 +0000 |
commit | f8cbd61bb2875664281ab37f54ca58c02b1775ef (patch) | |
tree | 9e73632435350804edb72985b6021dfba66737f5 /plugins/org.eclipse.emf.cdo.compare | |
parent | 5991889c5ff1a0745f52d23255bb6904c18cdf33 (diff) | |
download | cdo-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.java | 38 |
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) |