Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassInfoImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOListImpl.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOAddFeatureDeltaImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOListFeatureDeltaImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOMoveFeatureDeltaImpl.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORemoveFeatureDeltaImpl.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java15
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())

Back to the top