From 9d9b5a5649952f6e1aa415caf0efec4fce89f896 Mon Sep 17 00:00:00 2001 From: samskivert Date: Wed, 10 Feb 2010 00:48:14 +0000 Subject: [PATCH] We don't actually want an inner class here with its outer this pointer and ability to implicitly call methods on its outer class. We just need a static wrapper. git-svn-id: https://samskivert.googlecode.com/svn/trunk@2738 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../com/samskivert/util/WeakObserverList.java | 60 +++++++++++-------- 1 file changed, 34 insertions(+), 26 deletions(-) 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();