public synchronized void updatePath(PropertyChangeListener listener,Object newObject,Set updateSet){
  if (currentObject != newObject) {
    removeListeners();
  }
  if ((children != null) && (children.length > 0)) {
    try {
      Object newValue=null;
      if (newObject != null) {
        updateSet.add(newObject);
        newValue=extractNewValue(newObject);
      }
      for (      BindPath child : children) {
        child.updatePath(listener,newValue,updateSet);
      }
    }
 catch (    Exception e) {
    }
  }
  if (currentObject != newObject) {
    addListeners(listener,newObject,updateSet);
  }
}

public synchronized void updatePath ( PropertyChangeListener listener , Object newObject , Set updateSet ) { if ( currentObject != newObject ) { removeListeners ( ) ; } if ( ( children != null ) && ( children . length > 0 ) ) { try { Object newValue = null ; if ( newObject != null ) { updateSet . add ( newObject ) ; newValue = extractNewValue ( newObject ) ; } for ( BindPath child : children ) { child . updatePath ( listener , newValue , updateSet ) ; } } catch ( Exception e ) { } } if ( currentObject != newObject ) { addListeners ( listener , newObject , updateSet ) ; } }
called when we detect a change somewhere down our path . first , check to see if our object is changing . if so remove our old listener next , update the reference object the children have and recurse finally , add listeners if we have a different object
