/**
  * Returns the old value from the {@link FeatureChange}s map for the <code>feature</code>, if it
  * exists.
  */
 @Override
 public Object getValueFeatureValue(Object element, Object feature, Object correspondingValue) {
   // first get the value from the FeatureChange, if it exists
   FeatureChange change = getFeatureChange(element, feature);
   if (change != null) {
     return change.getOldValue();
   }
   return astCacheElementModelAdapter != null
       ? astCacheElementModelAdapter.getValueFeatureValue(element, feature, correspondingValue)
       : super.getValueFeatureValue(element, feature, correspondingValue);
 }
 /**
  * Filters out added {@link CodeSyncElement}s. Returns the new containment list from the {@link
  * FeatureChange}s map for the <code>feature</code>, if it exists.
  */
 @SuppressWarnings("unchecked")
 @Override
 public Iterable<?> getContainmentFeatureIterable(
     Object element, Object feature, Iterable<?> correspondingIterable) {
   // first get the children from the FeatureChange, if it exists
   Iterable<?> result;
   FeatureChange change = getFeatureChange(element, feature);
   if (change != null) {
     result = (Iterable<?>) change.getOldValue();
   } else {
     result =
         astCacheElementModelAdapter != null
             ? astCacheElementModelAdapter.getContainmentFeatureIterable(
                 element, feature, correspondingIterable)
             : super.getContainmentFeatureIterable(element, feature, correspondingIterable);
   }
   return new FilteredIterable<Object, Object>((Iterator<Object>) result.iterator()) {
     protected boolean isAccepted(Object candidate) {
       if (candidate instanceof CodeSyncElement && ((CodeSyncElement) candidate).isAdded())
         return false;
       return true;
     }
   };
 }