final Object value) {
final Object value, final List pending) {
    private void removeInternal(final Object obj, Property prop,                                final Object value) {        if (LOG.isDebugEnabled()) {            trace("remove", new Object[] {obj, prop.getName(), value});        }        prop.dispatch(new Property.Switch() {                public void onRole(Role role) {                    PropertyEvent ev;                    try {                        ev = new RemoveEvent(Session.this, obj, role, value);                    } catch (TypeException te) {                        te.setInternal(false);                        throw te;                    }                    addEvent(ev);                    if (role.isReversable()) {                        reverseUpdateOld(ev, value);                    }                    if (role.isComponent()) {                        cascadeDelete(obj, value);                    }                }                public void onAlias(Alias alias) {                    removeInternal(obj, alias.getTarget(), value);                }                public void onLink(Link link) {		    Query q = getQuery(obj, link, value);		    Cursor c = retrieve(q).getDataSet().getCursor();		    while (c.next()) {			deleteInternal(c.get());		    }                }            });        if (LOG.isDebugEnabled()) {            untrace("remove");        }    }