diff --git a/src/java/com/samskivert/util/WeakObserverList.java b/src/java/com/samskivert/util/WeakObserverList.java index 44147673..9b8e3c24 100644 --- a/src/java/com/samskivert/util/WeakObserverList.java +++ b/src/java/com/samskivert/util/WeakObserverList.java @@ -82,31 +82,7 @@ public class WeakObserverList extends AbstractList */ public WeakObserverList (int notifyPolicy, boolean allowDups) { - // dereference the elements when searching for a value - _wrappedList = new ObserverList>(notifyPolicy, allowDups) { - @Override public int indexOf (Object element) { - @SuppressWarnings("unchecked") WeakReference ref = - (WeakReference)element; - T value = ref.get(); - for (int ii = 0, nn = size(); ii < nn; ii++) { - if (value == get(ii).get()) { - return ii; - } - } - return -1; - } - @Override public int lastIndexOf (Object element) { - @SuppressWarnings("unchecked") WeakReference ref = - (WeakReference)element; - T value = ref.get(); - for (int ii = size() - 1; ii >= 0; ii--) { - if (value == get(ii).get()) { - return ii; - } - } - return -1; - } - }; + _wrappedList = new WrappedList(notifyPolicy, allowDups); } @Override // documentation inherited @@ -215,8 +191,40 @@ public class WeakObserverList extends AbstractList protected ObserverOp _op; } + /** + * ObserverList extension that dereferences elements when searching for a value. + */ + protected static class WrappedList extends ObserverList> + { + public WrappedList (int notifyPolicy, boolean allowDups) { + super(notifyPolicy, allowDups); + } + + @Override public int indexOf (Object element) { + @SuppressWarnings("unchecked") WeakReference ref = (WeakReference)element; + T value = ref.get(); + for (int ii = 0, nn = size(); ii < nn; ii++) { + if (value == get(ii).get()) { + return ii; + } + } + return -1; + } + + @Override public int lastIndexOf (Object element) { + @SuppressWarnings("unchecked") WeakReference ref = (WeakReference)element; + T value = ref.get(); + for (int ii = size() - 1; ii >= 0; ii--) { + if (value == get(ii).get()) { + return ii; + } + } + return -1; + } + } + /** The wrapped list. */ - protected ObserverList> _wrappedList; + protected WrappedList _wrappedList; /** The wrapper op. */ protected DerefOp _derefOp = new DerefOp();