Bug 570852: [UI-Viewers] Revise AbstractPostSelectionProvider
Change-Id: Ia41ba52e9963aa9cdb017a924f7e740fa43d6c6e
Signed-off-by: Stephan Wahlbrink <sw@wahlbrink.eu>
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java
deleted file mode 100644
index 707bbcf..0000000
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/AbstractPostSelectionProvider.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2012, 2021 Stephan Wahlbrink and others.
- #
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- #
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- #
- # Contributors:
- # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.ecommons.ui.util;
-
-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.ecommons.collections.FastList;
-
-
-public abstract class AbstractPostSelectionProvider implements IPostSelectionProvider {
-
-
- private final FastList<ISelectionChangedListener> fSelectionListeners= new FastList<>(ISelectionChangedListener.class);
- private final FastList<ISelectionChangedListener> fPostSelectionListeners= new FastList<>(ISelectionChangedListener.class);
-
-
- public AbstractPostSelectionProvider() {
- }
-
-
- @Override
- public void addSelectionChangedListener(final ISelectionChangedListener listener) {
- fSelectionListeners.add(listener);
- }
-
- @Override
- public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
- fSelectionListeners.remove(listener);
- }
-
-
- @Override
- public void addPostSelectionChangedListener(final ISelectionChangedListener listener) {
- fPostSelectionListeners.add(listener);
- }
-
- @Override
- public void removePostSelectionChangedListener(final ISelectionChangedListener listener) {
- fPostSelectionListeners.remove(listener);
- }
-
-
- protected void fireSelectionChanged(final SelectionChangedEvent event) {
- final ISelectionChangedListener[] listeners = fSelectionListeners.toArray();
- for (int i = 0; i < listeners.length; i++) {
- final ISelectionChangedListener l = listeners[i];
- SafeRunnable.run(new SafeRunnable() {
- @Override
- public void run() {
- l.selectionChanged(event);
- }
- });
- }
- }
-
- protected void firePostSelectionChanged(final SelectionChangedEvent event) {
- final ISelectionChangedListener[] listeners = fPostSelectionListeners.toArray();
- for (int i = 0; i < listeners.length; i++) {
- final ISelectionChangedListener l = listeners[i];
- SafeRunnable.run(new SafeRunnable() {
- @Override
- public void run() {
- l.selectionChanged(event);
- }
- });
- }
- }
-
-}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
index e363159..3f38160 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/util/PostSelectionProviderProxy.java
@@ -21,6 +21,8 @@
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.statet.ecommons.ui.viewers.AbstractPostSelectionProvider;
+
public class PostSelectionProviderProxy extends AbstractPostSelectionProvider {
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
new file mode 100644
index 0000000..31cdd67
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/AbstractPostSelectionProvider.java
@@ -0,0 +1,77 @@
+/*=============================================================================#
+ # Copyright (c) 2012, 2021 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+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.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public abstract class AbstractPostSelectionProvider implements IPostSelectionProvider {
+
+
+ private final CopyOnWriteList<ISelectionChangedListener> selectionListeners= new CopyOnWriteList<>();
+
+ private final CopyOnWriteList<ISelectionChangedListener> postSelectionListeners= new CopyOnWriteList<>();
+
+
+ public AbstractPostSelectionProvider() {
+ }
+
+
+ @Override
+ public void addSelectionChangedListener(final ISelectionChangedListener listener) {
+ this.selectionListeners.add(listener);
+ }
+
+ @Override
+ public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
+ this.selectionListeners.remove(listener);
+ }
+
+
+ @Override
+ public void addPostSelectionChangedListener(final ISelectionChangedListener listener) {
+ this.postSelectionListeners.add(listener);
+ }
+
+ @Override
+ public void removePostSelectionChangedListener(final ISelectionChangedListener listener) {
+ this.postSelectionListeners.remove(listener);
+ }
+
+
+ protected void fireSelectionChanged(final SelectionChangedEvent event) {
+ final List<ISelectionChangedListener> listeners = this.selectionListeners.toList();
+ for (final ISelectionChangedListener listener : listeners) {
+ SafeRunnable.run(() -> listener.selectionChanged(event));
+ }
+ }
+
+ protected void firePostSelectionChanged(final SelectionChangedEvent event) {
+ final List<ISelectionChangedListener> listeners = this.postSelectionListeners.toList();
+ for (final ISelectionChangedListener listener : listeners) {
+ SafeRunnable.run(() -> listener.selectionChanged(event));
+ }
+ }
+
+}