Return early when you #remove a set of listeners.
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/ListenerRegistry.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
index 6fb769f..62d77e5 100644
--- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
+++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
@@ -57,8 +57,10 @@
void put(String key, ListenerList value) {
if (key == null)
throw new NullPointerException();
- if (value == null)
+ if (value == null) {
remove(key);
+ return;
+ }
// replace if exists, keeping track of an empty position
int emptyIndex = -1;
for (int i = 0; i < keys.length; i++) {
@@ -146,5 +148,12 @@
if (list.isEmpty())
registry.remove(path);
}
+
+ /**
+ * Remove all of the listeners registered under the given path.
+ */
+ public synchronized void clear(String path) {
+ registry.remove(path);
+ }
}