Changeset 11224 in josm for trunk/src/org/openstreetmap/josm/tools/ListenerList.java
- Timestamp:
- 2016-11-08T23:29:31+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/ListenerList.java
r11018 r11224 80 80 */ 81 81 public synchronized void addWeakListener(T listener) { 82 ensureNotInList(listener); 83 // clean the weak listeners, just to be sure... 84 while (weakListeners.remove(new WeakListener<T>(null))) { 85 // continue 86 } 87 weakListeners.add(new WeakListener<>(listener)); 82 if (ensureNotInList(listener)) { 83 // clean the weak listeners, just to be sure... 84 while (weakListeners.remove(new WeakListener<T>(null))) { 85 // continue 86 } 87 weakListeners.add(new WeakListener<>(listener)); 88 } 88 89 } 89 90 … … 93 94 */ 94 95 public synchronized void addListener(T listener) { 95 ensureNotInList(listener); 96 listeners.add(listener); 97 } 98 99 private void ensureNotInList(T listener) { 96 if (ensureNotInList(listener)) { 97 listeners.add(listener); 98 } 99 } 100 101 private boolean ensureNotInList(T listener) { 100 102 CheckParameterUtil.ensureParameterNotNull(listener, "listener"); 101 103 if (containsListener(listener)) { 102 104 failAdd(listener); 105 return false; 106 } else { 107 return true; 103 108 } 104 109 } … … 217 222 } 218 223 224 private static class UncheckedListenerList<T> extends ListenerList<T> { 225 @Override 226 protected void failAdd(T listener) { 227 Logging.warn("Listener was alreaady added: {0}", listener); 228 // ignore 229 } 230 231 @Override 232 protected void failRemove(T listener) { 233 Logging.warn("Listener was removed twice or not added: {0}", listener); 234 // ignore 235 } 236 } 237 219 238 /** 220 239 * Create a new listener list … … 229 248 } 230 249 } 250 251 /** 252 * Creates a new listener list that does not fail if listeners are added ore removed twice. 253 * <p> 254 * Use of this list is discouraged. You should always use {@link #create()} in new implementations and check your listeners. 255 * @param <T> The listener type 256 * @return A new list. 257 * @since 11224 258 */ 259 public static <T> ListenerList<T> createUnchecked() { 260 return new UncheckedListenerList<>(); 261 } 231 262 }
Note:
See TracChangeset
for help on using the changeset viewer.