[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));
 		}
 	}