@Override public void addListener(AppStorageListener l) { listeners.add(l); }
@Override public void removeListener(AppStorageListener l) { listeners.remove(l); }
@Override public void removeListeners() { listeners.removeAll(); } }
@Test public void concurrencyIssueTest() { // 2 adds using a different target object WeakListenerList<TestListener> listeners = new WeakListenerList<>(); TestListener l = () -> { TestListener l2 = () -> { }; listeners.add(l2); }; listeners.add(l); // check there is no more java.util.ConcurrentModificationException coming from // the WeakHashMap listeners.notify(TestListener::onTest); assertTrue(listeners.remove(l)); assertFalse(listeners.remove(l)); } }
private WeakListenerList<L> getListeners(String projectFileId) { return listeners.computeIfAbsent(projectFileId, s -> new WeakListenerList<>()); }
@Override public void addListener(AppStorageListener l) { listeners.add(l); }
@Override public void removeListener(AppStorageListener l) { listeners.remove(l); }
@Override public void removeListeners() { listeners.removeAll(); } }
public void addListener(ProjectFolderListener listener) { listeners.add(listener); }
public void removeListener(ProjectFileListener listener) { listeners.remove(listener); }
public void removeAllListeners() { listeners.removeAll(); } }
public void addListener(ProjectFileListener listener) { listeners.add(listener); }
public void removeListener(ProjectFolderListener listener) { listeners.remove(listener); }
public void addListener(F projectFile, L listener) { Objects.requireNonNull(projectFile); Objects.requireNonNull(listener); getListeners(projectFile.getId()).add(listener); }
public void removeListener(F projectFile, L listener) { Objects.requireNonNull(projectFile); Objects.requireNonNull(listener); getListeners(projectFile.getId()).remove(listener); } }