Bug 147545 [DataBinding] When attempting to fire a stale event AbstractObservable throws ClassCastException
The code in AbstractObservable for the firing of stale events appears to be incomplete. When listeners are added they're added as type IStaleListener but when retrieved they're cast to IChangeListener. I'm assuming that code was copied from the change listener code but not completed. Attaching patch...
bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/observable/list/AbstractObservableList.java
if (listChangeListeners instanceof IListChangeListener) {
			((IListChangeListener) listChangeListeners).handleListChange(this,
					diff);
			return;
		}
		Collection changeListenerCollection = (Collection) listChangeListeners;
		IListChangeListener[] listeners = (IListChangeListener[]) (changeListenerCollection)
				.toArray(new IListChangeListener[changeListenerCollection
						.size()]);
		for (int i = 0; i < listeners.length; i++) {
			listeners[i].handleListChange(this, diff);
		}
	}
	public void addChangeListener(IChangeListener listener) {
		if (changeListeners == null) {
			boolean hadListeners = hasListeners();
			changeListeners = listener;
			if (!hadListeners) {
				firstListenerAdded();
			}
			return;
		}
		Collection listenerList;
		if (changeListeners instanceof IChangeListener) {
			IChangeListener l = (IChangeListener) changeListeners;
			listenerList = new ArrayList();
			listenerList.add(l);
		} else {
			listenerList = (Collection) changeListeners;
		}