[UI-Viewers] Fix AbstractPostSelectionProvider.add*Listener
Implementations did not comply spec for already registered listeners.
Change-Id: I7e9915953ba8e89482c9d9fe61684eae3eacbac8
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
index 31cdd67..ff8d1e1 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
@@ -14,14 +14,12 @@
package org.eclipse.statet.ecommons.ui.viewers;
-import java.util.List;
-
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.IPostSelectionProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.statet.jcommons.collections.CopyOnWriteList;
+import org.eclipse.statet.jcommons.collections.CopyOnWriteIdentityListSet;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
@@ -29,9 +27,11 @@
public abstract class AbstractPostSelectionProvider implements IPostSelectionProvider {
- private final CopyOnWriteList<ISelectionChangedListener> selectionListeners= new CopyOnWriteList<>();
+ private final CopyOnWriteIdentityListSet<ISelectionChangedListener> selectionListeners=
+ new CopyOnWriteIdentityListSet<>();
- private final CopyOnWriteList<ISelectionChangedListener> postSelectionListeners= new CopyOnWriteList<>();
+ private final CopyOnWriteIdentityListSet<ISelectionChangedListener> postSelectionListeners=
+ new CopyOnWriteIdentityListSet<>();
public AbstractPostSelectionProvider() {
@@ -61,15 +61,13 @@
protected void fireSelectionChanged(final SelectionChangedEvent event) {
- final List<ISelectionChangedListener> listeners = this.selectionListeners.toList();
- for (final ISelectionChangedListener listener : listeners) {
+ for (final ISelectionChangedListener listener : this.selectionListeners) {
SafeRunnable.run(() -> listener.selectionChanged(event));
}
}
protected void firePostSelectionChanged(final SelectionChangedEvent event) {
- final List<ISelectionChangedListener> listeners = this.postSelectionListeners.toList();
- for (final ISelectionChangedListener listener : listeners) {
+ for (final ISelectionChangedListener listener : this.postSelectionListeners) {
SafeRunnable.run(() -> listener.selectionChanged(event));
}
}