diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java index 69d1df257e..ac4abc8018 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStoreImpl.java @@ -228,18 +228,19 @@ public final class CDOStoreImpl implements CDOStore } InternalCDORevision revision = readRevision(cdoObject); - if (feature.isMany()) + if (feature.isUnsettable()) { - CDOList list = revision.getList(feature); - return list != null && !list.isEmpty(); + Object value = revision.getValue(feature); + return value != null; } - Object value = revision.getValue(feature); - if (feature.isUnsettable()) + if (feature.isMany()) { - return value != null; + CDOList list = revision.getListOrNull(feature); + return list != null && !list.isEmpty(); } + Object value = revision.getValue(feature); if (value == null) { return false; @@ -603,12 +604,15 @@ public final class CDOStoreImpl implements CDOStore List<?> list = (List<?>)object; list.clear(); } + + if (!feature.isUnsettable()) + { + return; + } } - else - { - CDOFeatureDelta delta = new CDOUnsetFeatureDeltaImpl(feature); - writeRevision(cdoObject, delta); - } + + CDOFeatureDelta delta = new CDOUnsetFeatureDeltaImpl(feature); + writeRevision(cdoObject, delta); } finally { @@ -842,7 +846,7 @@ public final class CDOStoreImpl implements CDOStore if (value instanceof CDOID) { CDOID id = (CDOID)value; - CDOList list = revision.getList(feature); + CDOList list = revision.getOrCreateList(feature); CDORevisionPrefetchingPolicy policy = view.options().getRevisionPrefetchingPolicy(); InternalCDORevisionManager revisionManager = view.getSession().getRevisionManager(); List<CDOID> listOfIDs = policy.loadAhead(revisionManager, view, eObject, feature, list, index, id); @@ -939,8 +943,8 @@ public final class CDOStoreImpl implements CDOStore // Bug 293283 / Bug 314387 InternalCDORevision revision = readRevision(cdoObject); - CDOList list = revision.getList(feature); - int size = list.size(); + CDOList list = revision.getListOrNull(feature); + int size = list == null ? 0 : list.size(); if (index < 0 || size <= index) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); |