public synchronized void addMapChangeListener(IMapChangeListener listener) {
   // this ensures that the next change will be seen by the new listener.
   recompute();
   super.addMapChangeListener(listener);
 }
 protected void getterCalled() {
   recompute();
   super.getterCalled();
 }
 /*
  * (non-Javadoc)
  *
  * @see org.eclipse.core.databinding.observable.list.ObservableList#dispose()
  */
 public void dispose() {
   bindings.removeChangeListener(markDirtyChangeListener);
   removeElementChangeListener();
   super.dispose();
 }