FELIX-4080 : Core R5] Add support for org.osgi.framework.UnfilteredServiceListener. Apply patch from David Bosschaert

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1549743 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java b/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
index 9da849f..623def0 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
@@ -48,6 +48,7 @@
 import org.osgi.framework.ServicePermission;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.SynchronousBundleListener;
+import org.osgi.framework.UnfilteredServiceListener;
 import org.osgi.framework.hooks.service.ListenerHook;
 import org.osgi.framework.launch.Framework;
 
@@ -908,8 +909,15 @@
         if (hasPermission)
         {
             // Dispatch according to the filter.
-            boolean matched = (filter == null)
-                || filter.match(((ServiceEvent) event).getServiceReference());
+            boolean matched;
+            if (l instanceof UnfilteredServiceListener) {
+                // An UnfilteredServiceListener always matches, regardless of the filter.
+                // The filter is still passed on to the Service Registry Hooks.
+                matched = true;
+            } else {
+                matched = (filter == null)
+                        || filter.match(((ServiceEvent) event).getServiceReference());
+            }
 
             if (matched)
             {
@@ -1112,4 +1120,4 @@
         public Map<BundleContext, List<ListenerInfo>> m_listeners = null;
         public EventObject m_event = null;
     }
-}
\ No newline at end of file
+}