From 048aa33228d201fb33cb7df0213370820836d36d Mon Sep 17 00:00:00 2001 From: David Dykstal Date: Mon, 16 Jun 2008 19:24:18 +0000 Subject: [PATCH] [227750] [regression] Eclipse with RSE 3.0 don't start or Display problems https://bugs.eclipse.org/bugs/show_bug.cgi?id=227750 --- .../model/SystemModelChangeEventManager.java | 15 +++++++++++ .../model/SystemPreferenceChangeManager.java | 13 ++++++++++ .../internal/core/model/SystemRegistry.java | 26 ++++++++++++------- .../model/SystemRemoteChangeEventManager.java | 14 ++++++++++ .../model/SystemResourceChangeManager.java | 13 ++++++++++ 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemModelChangeEventManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemModelChangeEventManager.java index bca94c07f89..36deaa805b3 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemModelChangeEventManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemModelChangeEventManager.java @@ -13,6 +13,7 @@ * Contributors: * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [218659] Make *EventManager, *ChangeManager thread-safe + * David Dykstal (IBM) - [227750] add a test for registered listeners ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -84,4 +85,18 @@ public class SystemModelChangeEventManager } } + /** + * Test if a manager has any listeners registered. + * @return true if there are any listeners, false if not. + */ + public boolean hasListeners() { + boolean result = false; + synchronized(lockObject) { + result = listeners.size() > 0; + } + return result; + } + + + } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemPreferenceChangeManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemPreferenceChangeManager.java index d641fce6b58..707945c12bc 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemPreferenceChangeManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemPreferenceChangeManager.java @@ -13,6 +13,7 @@ * Contributors: * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [218659] Make *EventManager, *ChangeManager thread-safe + * David Dykstal (IBM) - [227750] add a test for registered listeners ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -84,4 +85,16 @@ public class SystemPreferenceChangeManager } } + /** + * Test if a manager has any listeners registered. + * @return true if there are any listeners, false if not. + */ + public boolean hasListeners() { + boolean result = false; + synchronized(lockObject) { + result = listeners.size() > 0; + } + return result; + } + } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java index cb72a82515a..f27282a13bf 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRegistry.java @@ -52,6 +52,7 @@ * David McKnight (IBM) - [225747] [dstore] Trying to connect to an "Offline" system throws an NPE * David McKnight (IBM) - [229116] NPE in when editing remote file in new workspace * David McKnight (IBM) - [234057] Wrong or missing model change event + * David Dykstal (IBM) - [227750] do not fire events if there are no listeners ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -124,10 +125,6 @@ public class SystemRegistry implements ISystemRegistry private final SystemModelChangeEventManager modelListenerManager = new SystemModelChangeEventManager(); private final SystemRemoteChangeEventManager remoteListManager = new SystemRemoteChangeEventManager(); - private int listenerCount = 0; - private int modelListenerCount = 0; - private int remoteListCount = 0; - private ISubSystemConfigurationProxy[] subsystemConfigurationProxies = null; private boolean errorLoadingFactory = false; @@ -2366,7 +2363,6 @@ public class SystemRegistry implements ISystemRegistry public void addSystemResourceChangeListener(ISystemResourceChangeListener l) { listenerManager.addSystemResourceChangeListener(l); - listenerCount++; } /** * De-Register your interest in being told when a system resource such as a connection is changed. @@ -2374,7 +2370,6 @@ public class SystemRegistry implements ISystemRegistry public void removeSystemResourceChangeListener(ISystemResourceChangeListener l) { listenerManager.removeSystemResourceChangeListener(l); - listenerCount--; } /** * Query if the ISystemResourceChangeListener is already listening for SystemResourceChange events @@ -2403,6 +2398,8 @@ public class SystemRegistry implements ISystemRegistry } } + if (!listenerManager.hasListeners()) return; + if (onMainThread()) { listenerManager.notify(event); } @@ -2446,7 +2443,6 @@ public class SystemRegistry implements ISystemRegistry public void addSystemModelChangeListener(ISystemModelChangeListener l) { modelListenerManager.addSystemModelChangeListener(l); - modelListenerCount++; } /** * De-Register your interest in being told when an RSE model resource is changed. @@ -2454,7 +2450,6 @@ public class SystemRegistry implements ISystemRegistry public void removeSystemModelChangeListener(ISystemModelChangeListener l) { modelListenerManager.removeSystemModelChangeListener(l); - modelListenerCount--; } private boolean onMainThread() @@ -2473,6 +2468,7 @@ public class SystemRegistry implements ISystemRegistry */ public void fireEvent(ISystemModelChangeEvent event) { + if (!modelListenerManager.hasListeners()) return; if (onMainThread()) { modelListenerManager.notify(event); } @@ -2487,6 +2483,7 @@ public class SystemRegistry implements ISystemRegistry */ public void fireModelChangeEvent(int eventType, int resourceType, Object resource, String oldName) { + if (!modelListenerManager.hasListeners()) return; SystemModelChangeEvent modelEvent = new SystemModelChangeEvent(); modelEvent.setEventType(eventType); modelEvent.setResourceType(resourceType); @@ -2528,7 +2525,6 @@ public class SystemRegistry implements ISystemRegistry public void addSystemRemoteChangeListener(ISystemRemoteChangeListener l) { remoteListManager.addSystemRemoteChangeListener(l); - remoteListCount++; } /** * De-Register your interest in being told when a remote resource is changed. @@ -2536,7 +2532,6 @@ public class SystemRegistry implements ISystemRegistry public void removeSystemRemoteChangeListener(ISystemRemoteChangeListener l) { remoteListManager.removeSystemRemoteChangeListener(l); - remoteListCount--; } /** @@ -2553,6 +2548,7 @@ public class SystemRegistry implements ISystemRegistry */ public void fireEvent(ISystemRemoteChangeEvent event) { + if (!remoteListManager.hasListeners()) return; if (onMainThread()) { remoteListManager.notify(event); } @@ -2580,6 +2576,8 @@ public class SystemRegistry implements ISystemRegistry // mark stale any filters that reference this object invalidateFiltersFor(resourceParent, subsystem); + if (!remoteListManager.hasListeners()) return; + SystemRemoteChangeEvent remoteEvent = new SystemRemoteChangeEvent(); remoteEvent.setEventType(eventType); remoteEvent.setResource(resource); @@ -2618,6 +2616,8 @@ public class SystemRegistry implements ISystemRegistry // mark stale any filters that reference this object invalidateFiltersFor(resourceParent, subsystem); + if (!remoteListManager.hasListeners()) return; + SystemRemoteChangeEvent remoteEvent = new SystemRemoteChangeEvent(); remoteEvent.setEventType(eventType); remoteEvent.setResource(resource); @@ -2656,6 +2656,8 @@ public class SystemRegistry implements ISystemRegistry // mark stale any filters that reference this object invalidateFiltersFor(resourceParent, subsystem); + if (!remoteListManager.hasListeners()) return; + SystemRemoteChangeEvent remoteEvent = new SystemRemoteChangeEvent(); remoteEvent.setOperation(operation); remoteEvent.setEventType(eventType); @@ -2696,6 +2698,8 @@ public class SystemRegistry implements ISystemRegistry // mark stale any filters that reference this object invalidateFiltersFor(resourceParent, subsystem); + if (!remoteListManager.hasListeners()) return; + SystemRemoteChangeEvent remoteEvent = new SystemRemoteChangeEvent(); remoteEvent.setOperation(operation); remoteEvent.setEventType(eventType); @@ -2910,6 +2914,7 @@ public class SystemRegistry implements ISystemRegistry */ public void fireEvent(ISystemPreferenceChangeEvent event) { + if (!preferenceListManager.hasListeners()) return; if (onMainThread()) { preferenceListManager.notify(event); } @@ -2922,6 +2927,7 @@ public class SystemRegistry implements ISystemRegistry */ public void fireEvent(ISystemPreferenceChangeListener l, ISystemPreferenceChangeEvent event) { + if (!preferenceListManager.hasListeners()) return; if (onMainThread()) { l.systemPreferenceChanged(event); } diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRemoteChangeEventManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRemoteChangeEventManager.java index 8f0165049f5..453f63569ca 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRemoteChangeEventManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemRemoteChangeEventManager.java @@ -14,6 +14,7 @@ * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * David McKnight (IBM) - [207100] adding SystemRemoteChangeEventManager.isRegisteredSystemRemoteChangeListener * Martin Oberhuber (Wind River) - [218659] Make *EventManager, *ChangeManager thread-safe + * David Dykstal (IBM) - [227750] add a test for registered listeners ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -112,4 +113,17 @@ public class SystemRemoteChangeEventManager } } + /** + * Test if a manager has any listeners registered. + * @return true if there are any listeners, false if not. + */ + public boolean hasListeners() { + boolean result = false; + synchronized(lockObject) { + result = listeners.length > 0; + } + return result; + } + + } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemResourceChangeManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemResourceChangeManager.java index 5039bf7b8f0..d207012e0cf 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemResourceChangeManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemResourceChangeManager.java @@ -14,6 +14,7 @@ * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [218659] Make *EventManager, *ChangeManager thread-safe * Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core + * David Dykstal (IBM) - [227750] add a test for registered listeners ********************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -113,5 +114,17 @@ public class SystemResourceChangeManager //l.systemResourceChanged(event); } } + + /** + * Test if a manager has any listeners registered. + * @return true if there are any listeners, false if not. + */ + public boolean hasListeners() { + boolean result = false; + synchronized(lockObject) { + result = listeners.size() > 0; + } + return result; + } } \ No newline at end of file