Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java35
1 files changed, 24 insertions, 11 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
index 03fb795b15..4728355da5 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
@@ -23,11 +23,11 @@ import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
import org.eclipse.emf.cdo.protocol.util.TransportException;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.internal.cdo.bundle.OM;
import org.eclipse.emf.internal.cdo.protocol.CommitTransactionRequest;
import org.eclipse.emf.internal.cdo.protocol.CommitTransactionResult;
-import org.eclipse.emf.internal.cdo.util.EMFPackageClosure;
import org.eclipse.emf.internal.cdo.util.ModelUtil;
import org.eclipse.net4j.IChannel;
@@ -283,32 +283,45 @@ public class CDOTransactionImpl extends CDOViewImpl implements CDOTransaction
private List<CDOPackage> analyzeNewPackages(CDOSessionImpl session)
{
- Set<EPackage> ePackages = new HashSet<EPackage>();
+ // Find all used classes and their super classes
+ Set<EClass> usedClasses = new HashSet<EClass>();
for (CDOObject object : newObjects.values())
{
- ePackages.add(object.eClass().getEPackage());
+ EClass usedClass = object.eClass();
+ if (usedClasses.add(usedClass))
+ {
+ for (EClass superType : usedClass.getEAllSuperTypes())
+ {
+ usedClasses.add(superType);
+ }
+ }
}
- // Find all indirectly referenced EPackages as well
- ePackages = new EMFPackageClosure().calculate(ePackages);
+ // Calculate the packages of the used classes
+ Set<EPackage> usedPackages = new HashSet<EPackage>();
+ for (EClass usedClass : usedClasses)
+ {
+ usedPackages.add(usedClass.getEPackage());
+ }
+ // Determine which of the used packages are new
CDOSessionPackageManager packageManager = session.getPackageManager();
- List<CDOPackage> cdoPackages = new ArrayList<CDOPackage>();
- for (EPackage ePackage : ePackages)
+ List<CDOPackage> newPackages = new ArrayList<CDOPackage>();
+ for (EPackage usedPackage : usedPackages)
{
- CDOPackageImpl cdoPackage = ModelUtil.getCDOPackage(ePackage, packageManager);
+ CDOPackageImpl cdoPackage = ModelUtil.getCDOPackage(usedPackage, packageManager);
if (cdoPackage == null)
{
- throw new IllegalStateException("Missing CDO package: " + ePackage.getNsURI());
+ throw new IllegalStateException("Missing CDO package: " + usedPackage.getNsURI());
}
if (!cdoPackage.isPersistent() && !cdoPackage.isSystem())
{
- cdoPackages.add(cdoPackage);
+ newPackages.add(cdoPackage);
}
}
- return cdoPackages;
+ return newPackages;
}
@SuppressWarnings("unchecked")

Back to the top