diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common')
7 files changed, 52 insertions, 6 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassInfoImpl.java index a6d150c0f8..5ca36d23ee 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassInfoImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassInfoImpl.java @@ -405,12 +405,14 @@ public final class CDOClassInfoImpl implements InternalCDOClassInfo, Adapter.Int { out.println(eClass.getName()); + out.println(); out.println("\t\t\tallPersistentFeatures"); for (EStructuralFeature feature : getAllPersistentFeatures()) { out.println("\t" + eClass.getFeatureID(feature) + "\t" + feature.getName() + "\t" + (feature.isTransient() ? "transient" : "persistent")); } + out.println(); out.println("\t\t\tsettingsFeatureIndices\tpersistentFeatureIndices\ttransientFeatureIndices"); for (int featureID = 0; featureID < settingsFeatureIndices.length; featureID++) { diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java index 06e77c786d..f52e607554 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java @@ -208,4 +208,22 @@ public class CDOListImpl extends BasicEList<Object> implements InternalCDOList.C flags &= ~USE_EQUALS_FLAG; } } + + /** + * An IndexOutOfBoundsException that constructs a message from the argument data. + * <p> + * Having this avoids having the byte code that computes the message repeated/in-lined at the creation site. + * + * @author Eike Stepper + * @since 4.7 + */ + public static class IndexOutOfBoundsException extends BasicIndexOutOfBoundsException + { + private static final long serialVersionUID = 1L; + + public IndexOutOfBoundsException(int index, int size) + { + super(index, size); + } + } } diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java index d1adfeaa53..325fb8d5c0 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java @@ -52,7 +52,7 @@ public class CDOAddFeatureDeltaImpl extends CDOSingleValueFeatureDeltaImpl imple Object value = getValue(); InternalCDORevision internalRevision = (InternalCDORevision)revision; - CDOList list = internalRevision.getList(feature); + CDOList list = internalRevision.getOrCreateList(feature); if (index < 0) { diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOListFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOListFeatureDeltaImpl.java index dd9f949584..14d9a6274e 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOListFeatureDeltaImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOListFeatureDeltaImpl.java @@ -563,6 +563,18 @@ public class CDOListFeatureDeltaImpl extends CDOFeatureDeltaImpl implements CDOL { listChanges.add(featureDelta); } + + if (featureDelta.getType() != CDOFeatureDelta.Type.UNSET) + { + EStructuralFeature feature = featureDelta.getFeature(); + if (feature.isMany() && feature.isUnsettable()) + { + if (listChanges.isEmpty()) + { + listChanges.add(new CDOClearFeatureDeltaImpl(feature)); + } + } + } } public Object applyTo(CDORevision revision) diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java index 5a50399db4..bd8c0a65b5 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java @@ -120,7 +120,7 @@ public class CDOMoveFeatureDeltaImpl extends CDOFeatureDeltaImpl implements CDOM EStructuralFeature feature = getFeature(); InternalCDORevision internalRevision = (InternalCDORevision)revision; - CDOList list = internalRevision.getList(feature); + CDOList list = internalRevision.getListOrNull(feature); if (oldPosition < 0) { diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java index 6af546a07a..b48cd7224a 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java @@ -71,7 +71,12 @@ public class CDORemoveFeatureDeltaImpl extends CDOSingleValueFeatureDeltaImpl im int index = getIndex(); InternalCDORevision internalRevision = (InternalCDORevision)revision; - CDOList list = internalRevision.getList(feature); + CDOList list = internalRevision.getListOrNull(feature); + if (list == null) + { + return null; + } + return list.remove(index); } diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java index 123c59bdbd..b47b69f69d 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java @@ -455,7 +455,7 @@ public class CDORevisionDeltaImpl implements InternalCDORevisionDelta private void checkNoProxies(EList<?> list, CDORevision revision) { - if (!((InternalCDORevision)revision).isUnchunked()) + if (list != null && !((InternalCDORevision)revision).isUnchunked()) { for (Object element : list) { @@ -468,8 +468,17 @@ public class CDORevisionDeltaImpl implements InternalCDORevisionDelta } }; - CDOList originList = originRevision.getList(feature); - CDOList dirtyList = dirtyRevision.getList(feature); + CDOList originList = originRevision.getListOrNull(feature); + if (originList == null) + { + originList = new CDOListImpl(0, 0); + } + + CDOList dirtyList = dirtyRevision.getListOrNull(feature); + if (dirtyList == null) + { + dirtyList = new CDOListImpl(0, 0); + } analyzer.analyzeLists(originList, dirtyList, new NOOPList()); if (!changes.isEmpty()) |