InternalEObject.EOPPOSITE_FEATURE_BASE - feature.getFeatureID(),
InternalEObject.EOPPOSITE_FEATURE_BASE - owner.eClass().getFeatureID(feature),
    public void dynamicUnset(InternalEObject owner, EStructuralFeature.Internal.DynamicValueHolder settings, int index)    {      Object oldValue = settings.dynamicGet(index);      if (isUnsettable() && oldValue == NIL)      {        oldValue = null;      }      NotificationChain notifications = null;      if (oldValue != null)      {        if (hasInverse())        {          InternalEObject internalEObject = (InternalEObject)oldValue;          notifications =             internalEObject.eInverseRemove              (owner,               internalEObject.eClass().getFeatureID(inverseFeature),               null,               notifications);        }        else if (isContainment())        {          notifications =             ((InternalEObject)oldValue).eInverseRemove              (owner,               InternalEObject.EOPPOSITE_FEATURE_BASE - feature.getFeatureID(),               null,               notifications);        }      }      settings.dynamicUnset(index);      if (owner.eNotificationRequired())      {        Notification notification =           new ENotificationImpl            (owner,              isUnsettable() ? Notification.UNSET : Notification.SET,              feature,             oldValue,              null);        if (notifications == null)        {          owner.eNotify(notification);        }        else        {          notifications.add(notification);          notifications.dispatch();        }      }      else if (notifications != null)      {        notifications.dispatch();      }    }