You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2017/02/06 14:37:51 UTC

svn commit: r1781908 [5/5] - in /felix/trunk/dependencymanager: cnf/localrepo/ cnf/releaserepo/ org.apache.felix.dependencymanager.annotation/ org.apache.felix.dependencymanager.annotation/src/org/apache/felix/dm/annotation/api/ org.apache.felix.depend...

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceUtil.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceUtil.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceUtil.java Mon Feb  6 14:37:49 2017
@@ -18,10 +18,14 @@
  */
 package org.apache.felix.dm.impl;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
@@ -38,6 +42,62 @@ public class ServiceUtil {
      * Useful when needing to provide empty service properties.
      */
     public final static Dictionary<String, Object> EMPTY_PROPERTIES = new Hashtable<>();
+    
+    /**
+     * Defines service properties which must not be propagated from the dependencies to component service properties.
+     */
+    public final static Set<String> NOT_PROPAGATABLE_SERVICE_PROPERTIES = 
+    		Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
+    				Constants.SERVICE_ID,
+    				Constants.SERVICE_RANKING,
+    				Constants.SERVICE_BUNDLEID,
+    				Constants.SERVICE_SCOPE,    				
+    				Constants.OBJECTCLASS,
+    				DependencyManager.ASPECT)));
+
+    /**
+     * Helper method used to convert a dictionary with untyped keys to a dictionary having a String key.
+     * (this method is useful when converting a Properties object into a compatible Dictionary<String, Object>
+     * object that is often needed in OSGI R6 API. 
+     */
+    @SuppressWarnings("unchecked")
+	public static <K,V> Dictionary<K, V> toR6Dictionary(Dictionary<?,?> properties) {
+    	return (Dictionary<K, V>) properties;
+    }
+
+    /**
+     * Dump some service properties in a petty form.
+     */
+    public static void appendProperties(StringBuilder result, Dictionary<?, ?> properties) {
+        if (properties != null) {
+            result.append("(");
+            Enumeration<?> enumeration = properties.keys();
+            while (enumeration.hasMoreElements()) {
+                Object key = enumeration.nextElement();
+                result.append(key.toString());
+                result.append('=');
+                Object value = properties.get(key);
+                if (value instanceof String[]) {
+                    String[] values = (String[]) value;
+                    result.append('{');
+                    for (int i = 0; i < values.length; i++) {
+                        if (i > 0) {
+                            result.append(',');
+                        }
+                        result.append(values[i].toString());
+                    }
+                    result.append('}');
+                }
+                else {
+                    result.append(value.toString());
+                }
+                if (enumeration.hasMoreElements()) {
+                    result.append(',');
+                }
+            }
+            result.append(")");
+        }
+    }
 
     /**
      * Returns the service ranking of a service, based on its service reference. If
@@ -47,7 +107,7 @@ public class ServiceUtil {
      * @param ref the service reference to determine the ranking for
      * @return the ranking
      */
-    public static int getRanking(ServiceReference ref) {
+    public static int getRanking(ServiceReference<?> ref) {
         return getRankingAsInteger(ref).intValue();
     }
     
@@ -59,7 +119,7 @@ public class ServiceUtil {
      * @param ref the service reference to determine the ranking for
      * @return the ranking
      */
-    public static Integer getRankingAsInteger(ServiceReference ref) {
+    public static Integer getRankingAsInteger(ServiceReference<?> ref) {
         Integer rank = (Integer) ref.getProperty(Constants.SERVICE_RANKING);
         if (rank != null) {
             return rank;
@@ -75,7 +135,7 @@ public class ServiceUtil {
      * @param ref the service reference to determine the service ID of
      * @return the service ID
      */
-    public static long getServiceId(ServiceReference ref) {
+    public static long getServiceId(ServiceReference<?> ref) {
         return getServiceIdAsLong(ref).longValue();
     }
     
@@ -87,11 +147,11 @@ public class ServiceUtil {
      * @param ref the service reference to determine the service ID of
      * @return the service ID
      */
-    public static Long getServiceIdAsLong(ServiceReference ref) {
+    public static Long getServiceIdAsLong(ServiceReference<?> ref) {
     	return getServiceIdObject(ref);
     }
     
-    public static Long getServiceIdObject(ServiceReference ref) {
+    public static Long getServiceIdObject(ServiceReference<?> ref) {
         Long aid = (Long) ref.getProperty(DependencyManager.ASPECT);
         if (aid != null) {
             return aid;
@@ -110,7 +170,7 @@ public class ServiceUtil {
      * @param ref the service reference
      * @return <code>true</code> if it's an aspect, <code>false</code> otherwise
      */
-    public static boolean isAspect(ServiceReference ref) {
+    public static boolean isAspect(ServiceReference<?> ref) {
         Long aid = (Long) ref.getProperty(DependencyManager.ASPECT);
         return (aid != null);
     }
@@ -122,7 +182,7 @@ public class ServiceUtil {
      * @param ref the service reference
      * @return a string representation of the service
      */
-    public static String toString(ServiceReference ref) {
+    public static String toString(ServiceReference<?> ref) {
         if (ref == null) {
             return "ServiceReference[null]";
         }
@@ -150,7 +210,7 @@ public class ServiceUtil {
      * @param exclude a list of properties to exclude, or <code>null</code> to show everything
      * @return a string representation of the service properties
      */
-    public static String propertiesToString(ServiceReference ref, List<String> exclude) {
+    public static String propertiesToString(ServiceReference<?> ref, List<String> exclude) {
         StringBuffer buf = new StringBuffer();
         String[] keys = ref.getPropertyKeys();
         for (int i = 0; i < keys.length; i++) {
@@ -187,7 +247,7 @@ public class ServiceUtil {
      * @param ref the ServiceReference to wrap
      * @return a new Dictionary used to wrap the ServiceReference properties
      */
-    public static Dictionary<String, Object> propertiesToDictionary(final ServiceReference ref) {
+    public static Dictionary<String, Object> propertiesToDictionary(final ServiceReference<?> ref) {
         return new Dictionary<String, Object>() {
             private Dictionary<String, Object> m_wrapper;
             

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/TemporalServiceDependencyImpl.java Mon Feb  6 14:37:49 2017
@@ -99,8 +99,9 @@ public class TemporalServiceDependencyIm
     /**
      * The ServiceTracker calls us here in order to inform about a service arrival.
      */
-    @Override
-    public void addedService(ServiceReference ref, Object service) {
+	@SuppressWarnings("rawtypes")
+	@Override
+    public void addedService(ServiceReference ref, Object event) {    	
         // Update our service cache, using the tracker. We do this because the
         // just added service might not be the service with the highest rank ...
         boolean makeAvailable = false;
@@ -111,8 +112,8 @@ public class TemporalServiceDependencyIm
             }
         }
         if (makeAvailable) {
-            getComponentContext().handleEvent(this, EventType.ADDED,
-                new ServiceEventImpl(m_component.getBundle(), m_component.getBundleContext(), ref, m_serviceInstance));
+            getComponentContext().handleEvent(this, EventType.ADDED, 
+            		 new ServiceEventImpl(m_component, ref, m_serviceInstance));
         } else {
             // This added will possibly unblock our invoke() method (if it's blocked in m_tracker.waitForService method).
         }
@@ -121,7 +122,8 @@ public class TemporalServiceDependencyIm
     /**
      * The ServiceTracker calls us here when a tracked service properties are modified.
      */
-    @Override
+    @SuppressWarnings("rawtypes")
+	@Override
     public void modifiedService(ServiceReference ref, Object service) {
         // We don't care.
     }
@@ -129,9 +131,12 @@ public class TemporalServiceDependencyIm
     /**
      * The ServiceTracker calls us here when a tracked service is lost.
      */
-    @Override
-    public void removedService(ServiceReference ref, Object service) {
-        // If we detect that the fwk is stopping, we behave as our superclass. That is:
+    @SuppressWarnings("rawtypes")
+	@Override
+    public void removedService(ServiceReference ref, Object event) {
+    	ServiceEventImpl eventImpl = (ServiceEventImpl) event;
+    	
+    	// If we detect that the fwk is stopping, we behave as our superclass. That is:
         // the lost dependency has to trigger our service deactivation, since the fwk is stopping
         // and the lost dependency won't come up anymore.
         if (m_frameworkBundle.getState() == Bundle.STOPPING) {
@@ -148,29 +153,32 @@ public class TemporalServiceDependencyIm
             }
             if (makeUnavailable) {
                 // the event.close method will unget the service.
-                m_component.handleEvent(this, EventType.REMOVED, new ServiceEventImpl(m_component.getBundle(),
-                    m_component.getBundleContext(), ref, m_serviceInstance));
+                m_component.handleEvent(this, EventType.REMOVED, new ServiceEventImpl(m_component, ref, m_serviceInstance));
             }
         } else {
-            // Unget what we got in addingService (see ServiceTracker 701.4.1)
-            m_component.getBundleContext().ungetService(ref);
-            // if there is no available services, the next call to invoke() method will block until another service
-            // becomes available. Else the next call to invoke() will return that highest ranked available service.
+        	eventImpl.close(); // will unget the service.                	
+        	// if there is no available services, the next call to invoke() method will block until another service
+        	// becomes available. Else the next call to invoke() will return that highest ranked available service.            
         }
     }
 
     @Override
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-        Object service = null;
+        ServiceEventImpl event = null;
         try {
-            service = m_tracker.waitForService(m_timeout);
+            event = (ServiceEventImpl) m_tracker.waitForService(m_timeout);
         } catch (InterruptedException e) {            
         }
         
-        if (service == null) {
+        if (event == null) {
             throw new IllegalStateException("Service unavailable: " + m_trackedServiceName.getName());
         }
         
+        Object service = event.getEvent();
+        if (service == null) {
+            throw new IllegalStateException("Service unavailable: " + m_trackedServiceName.getName());
+        }       
+        
         try {
 			try {
 				return method.invoke(service, args);

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AbstractFactoryFilterIndex.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AbstractFactoryFilterIndex.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AbstractFactoryFilterIndex.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AbstractFactoryFilterIndex.java Mon Feb  6 14:37:49 2017
@@ -32,6 +32,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public abstract class AbstractFactoryFilterIndex {
 	protected final Map<Long, SortedSet<ServiceReference>> m_sidToServiceReferencesMap = new HashMap<>();
 	protected final Map <ServiceListener, String> m_listenerToFilterMap = new HashMap<>();

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AdapterFilterIndex.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AdapterFilterIndex.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AdapterFilterIndex.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AdapterFilterIndex.java Mon Feb  6 14:37:49 2017
@@ -42,6 +42,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public class AdapterFilterIndex extends AbstractFactoryFilterIndex implements FilterIndex, ServiceTrackerCustomizer {
 	// (&(objectClass=foo.Bar)(|(service.id=18233)(org.apache.felix.dependencymanager.aspect=18233)))
 	private static final String FILTER_REGEXP = "\\(&\\(" + Constants.OBJECTCLASS + "=([a-zA-Z\\.\\$0-9]*)\\)\\(\\|\\(" 
@@ -198,7 +199,8 @@ public class AdapterFilterIndex extends
         }
     }
 
-    public Object addingService(ServiceReference reference) {
+    @SuppressWarnings("unchecked")
+	public Object addingService(ServiceReference reference) {
         BundleContext context;
         synchronized (m_lock) {
             context = m_context;

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AspectFilterIndex.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AspectFilterIndex.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AspectFilterIndex.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/AspectFilterIndex.java Mon Feb  6 14:37:49 2017
@@ -43,6 +43,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public class AspectFilterIndex extends AbstractFactoryFilterIndex implements FilterIndex, ServiceTrackerCustomizer {
 	// (&(objectClass=foo.Bar)(|(!(service.ranking=*))(service.ranking<=99))(|(service.id=4451)(org.apache.felix.dependencymanager.aspect=4451)))
     private static final String FILTER_START = "(&(" + Constants.OBJECTCLASS + "=";
@@ -240,7 +241,8 @@ public class AspectFilterIndex extends A
 		}
     }
 
-    public Object addingService(ServiceReference reference) {
+    @SuppressWarnings("unchecked")
+	public Object addingService(ServiceReference reference) {
         BundleContext context;
         synchronized (m_lock) {
             context = m_context;

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptor.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptor.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptor.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptor.java Mon Feb  6 14:37:49 2017
@@ -19,6 +19,7 @@
 package org.apache.felix.dm.impl.index;
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
@@ -34,6 +35,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public class BundleContextInterceptor extends BundleContextInterceptorBase {
 	protected static final String INDEX_LOG_TRESHOLD = "org.apache.felix.dm.index.log.treshold";
     private final ServiceRegistryCache m_cache;
@@ -159,4 +161,19 @@ public class BundleContextInterceptor ex
     public void serviceChanged(ServiceEvent event) {
         m_cache.serviceChangedForFilterIndices(event);
     }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <S> ServiceReference<S> getServiceReference(Class<S> clazz)
+    {
+        return getServiceReference(clazz.getName());
+    }
+
+    @SuppressWarnings("unchecked")
+	@Override
+    public <S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz, String filter)
+        throws InvalidSyntaxException
+    {
+        return Arrays.asList(getServiceReferences(clazz.getName(), filter));
+    }
 }

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptorBase.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptorBase.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptorBase.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/BundleContextInterceptorBase.java Mon Feb  6 14:37:49 2017
@@ -20,6 +20,7 @@ package org.apache.felix.dm.impl.index;
 
 import java.io.File;
 import java.io.InputStream;
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +33,9 @@ import org.osgi.framework.BundleListener
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 
@@ -41,6 +44,7 @@ import org.osgi.framework.ServiceRegistr
  * 
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings({ "unchecked", "rawtypes" })
 public abstract class BundleContextInterceptorBase implements BundleContext, ServiceListener {
     protected final BundleContext m_context;
     /** Keeps track of all service listeners and their optional filters. */
@@ -114,14 +118,24 @@ public abstract class BundleContextInter
         m_context.removeFrameworkListener(listener);
     }
 
-    public ServiceRegistration registerService(String[] clazzes, Object service, @SuppressWarnings("rawtypes") Dictionary properties) {
+	public ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties) {
         return m_context.registerService(clazzes, service, properties);
     }
 
-    public ServiceRegistration registerService(String clazz, Object service, @SuppressWarnings("rawtypes") Dictionary properties) {
+    public ServiceRegistration registerService(String clazz, Object service, Dictionary properties) {
         return m_context.registerService(clazz, service, properties);
     }
 
+    @Override
+    public <S> ServiceRegistration<S> registerService(Class<S> clazz, S service, Dictionary<String, ?> properties) {
+        return m_context.registerService(clazz, service, properties);
+    }
+    
+    @Override
+    public <S> ServiceRegistration<S> registerService(Class<S> clazz, ServiceFactory<S> factory, Dictionary<String, ?> properties) {
+        return m_context.registerService(clazz, factory, properties);
+    }
+    
     public ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
         return m_context.getServiceReferences(clazz, filter);
     }
@@ -134,10 +148,26 @@ public abstract class BundleContextInter
         return m_context.getServiceReference(clazz);
     }
 
+    @Override
+    public <S> ServiceReference<S> getServiceReference(Class<S> clazz) {
+        return m_context.getServiceReference(clazz);
+    }
+
+    @Override
+    public <S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz, String filter) throws InvalidSyntaxException {
+        return m_context.getServiceReferences(clazz, filter);
+    }
+
     public Object getService(ServiceReference reference) {
         return m_context.getService(reference);
     }
 
+    @Override
+    public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> reference)
+    {
+        return m_context.getServiceObjects(reference);
+    }
+
     public boolean ungetService(ServiceReference reference) {
         return m_context.ungetService(reference);
     }
@@ -150,7 +180,11 @@ public abstract class BundleContextInter
         return m_context.createFilter(filter);
     }
 
-	@SuppressWarnings("unchecked")
+    @Override
+    public Bundle getBundle(String location) {
+        return m_context.getBundle(location);
+    }
+    
 	protected Entry<ServiceListener, String>[] synchronizeCollection() {
         // lazy copy on write: we make a new copy only if writes have changed the collection
         synchronized (m_serviceListenerFilterMap) {

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/multiproperty/MultiPropertyFilterIndex.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/multiproperty/MultiPropertyFilterIndex.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/multiproperty/MultiPropertyFilterIndex.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/index/multiproperty/MultiPropertyFilterIndex.java Mon Feb  6 14:37:49 2017
@@ -43,6 +43,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public class MultiPropertyFilterIndex implements FilterIndex, ServiceTrackerCustomizer {
 
     private final Object m_lock = new Object();
@@ -50,7 +51,7 @@ public class MultiPropertyFilterIndex im
     private BundleContext m_context;
 	private Map<String, Property> m_configProperties = new LinkedHashMap<>();
 	private List<String> m_negatePropertyKeys = new ArrayList<>();
-    private final Map<String, List<ServiceReference>> m_keyToServiceReferencesMap = new HashMap<>();
+	private final Map<String, List<ServiceReference>> m_keyToServiceReferencesMap = new HashMap<>();
     private final Map<String, List<ServiceListener>> m_keyToListenersMap = new HashMap<>();
     private final Map<ServiceListener, String> m_listenerToFilterMap = new HashMap<>();
 
@@ -281,7 +282,8 @@ public class MultiPropertyFilterIndex im
 		return builder.toString();
     }
     
-    public Object addingService(ServiceReference reference) {
+    @SuppressWarnings("unchecked")
+	public Object addingService(ServiceReference reference) {
         BundleContext context;
         synchronized (m_lock) {
             context = m_context;

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/metatype/MetaTypeProviderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/metatype/MetaTypeProviderImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/metatype/MetaTypeProviderImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/metatype/MetaTypeProviderImpl.java Mon Feb  6 14:37:49 2017
@@ -200,8 +200,7 @@ public class MetaTypeProviderImpl implem
      * We also implements the ManagedService and we just delegates the configuration handling to
      * our associated ConfigurationDependency.
      */
-    @SuppressWarnings("rawtypes")
-    public void updated(Dictionary properties) throws ConfigurationException {
+    public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
         m_managedServiceDelegate.updated(properties);
     }
 
@@ -268,8 +267,7 @@ public class MetaTypeProviderImpl implem
         return m_pid;
     }
 
-    @SuppressWarnings("rawtypes")
-    public void updated(String pid, Dictionary properties) throws ConfigurationException {
+    public void updated(String pid, Dictionary<String, ?> properties) throws ConfigurationException {
         m_managedServiceFactoryDelegate.updated(pid, properties);
     }
 }

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTracker.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTracker.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTracker.java Mon Feb  6 14:37:49 2017
@@ -63,6 +63,7 @@ import org.osgi.framework.Version;
  * @ThreadSafe
  * @version $Revision: 6386 $
  */
+@SuppressWarnings("rawtypes")
 public class ServiceTracker implements ServiceTrackerCustomizer {
 	/* set this to true to compile in debug messages */
 	static final boolean				DEBUG			= false;
@@ -498,6 +499,7 @@ public class ServiceTracker implements S
 	 *         <code>ServiceTracker</code>.
 	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
 	 */
+	@SuppressWarnings("unchecked")
 	public Object addingService(ServiceReference reference) {
 		return context.getService(reference);
 	}

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTrackerCustomizer.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTrackerCustomizer.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTrackerCustomizer.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/tracker/ServiceTrackerCustomizer.java Mon Feb  6 14:37:49 2017
@@ -46,6 +46,7 @@ import org.osgi.framework.ServiceReferen
  * @ThreadSafe
  * @version $Revision: 5874 $
  */
+@SuppressWarnings("rawtypes")
 public interface ServiceTrackerCustomizer {
 	/**
 	 * A service is being added to the <code>ServiceTracker</code>.

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/impl/FactoryConfigurationAdapterImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/impl/FactoryConfigurationAdapterImplTest.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/impl/FactoryConfigurationAdapterImplTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/impl/FactoryConfigurationAdapterImplTest.java Mon Feb  6 14:37:49 2017
@@ -52,7 +52,7 @@ public class FactoryConfigurationAdapter
         FactoryConfigurationAdapterImpl cdi = createConfigurationDependency(service, Map.class);
         ensure.step(1);
 
-        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, createDictionary());
+        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, (Dictionary<String, ?>) createDictionary());
 
         TimeUnit.SECONDS.sleep(1L);
 
@@ -67,7 +67,7 @@ public class FactoryConfigurationAdapter
 
         FactoryConfigurationAdapterImpl cdi = createConfigurationDependency(service, MyConfiguration.class);
 
-        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, createDictionary());
+        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, (Dictionary<String, ?>) createDictionary());
 
         ensure.waitForStep(1, 1000);
 
@@ -83,7 +83,7 @@ public class FactoryConfigurationAdapter
 
         FactoryConfigurationAdapterImpl cdi = createConfigurationDependency(service);
 
-        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, createDictionary());
+        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, (Dictionary<String, ?>) createDictionary());
 
         ensure.waitForStep(1, 1000);
 
@@ -99,7 +99,7 @@ public class FactoryConfigurationAdapter
 
         FactoryConfigurationAdapterImpl cdi = createConfigurationDependency(service);
 
-        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, createDictionary());
+        ((ManagedServiceFactory) cdi.m_component.getInstance()).updated(CONF_PID, (Dictionary<String, ?>) createDictionary());
 
         ensure.waitForStep(1, 1000);
 
@@ -137,7 +137,7 @@ public class FactoryConfigurationAdapter
         return (FactoryConfigurationAdapterImpl) result;
     }
 
-    private Dictionary<?,?> createDictionary() {
+    private Dictionary<String, Object> createDictionary() {
         Dictionary<String, Object> result = new Hashtable<>();
         result.put("true", "true");
         result.put("value", "42");

Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/tracker/TrackedTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/tracker/TrackedTest.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/tracker/TrackedTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/test/org/apache/felix/dm/tracker/TrackedTest.java Mon Feb  6 14:37:49 2017
@@ -40,6 +40,7 @@ import org.osgi.framework.ServiceReferen
 /**
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
+@SuppressWarnings("rawtypes")
 public class TrackedTest {
 
 	@Test
@@ -73,7 +74,7 @@ public class TrackedTest {
 		tracker.open();
 		Tracked tracked = tracker.getTracked();
 		
-		ServiceReference[] initialReferences = new ServiceReference[] {
+		ServiceReference<?>[] initialReferences = new ServiceReference[] {
 				createServiceReference(1L),
 				createServiceReference(2L, 1L, 10),
 				createServiceReference(3L),
@@ -104,7 +105,7 @@ public class TrackedTest {
 		tracker.open();
 		Tracked tracked = tracker.getTracked();
 		
-		ServiceReference[] initialReferences = new ServiceReference[] {
+		ServiceReference<?>[] initialReferences = new ServiceReference[] {
 				createServiceReference(1L),
 				createServiceReference(2L, 1L, 10),
 				createServiceReference(3L),
@@ -117,7 +118,7 @@ public class TrackedTest {
 		assertArrayEquals(new Long[] { 2L, 5L }, customizer.getServiceReferenceIds());
 		
 		// create a service event that registers another but lower ranked aspect for service with id 1. 
-		ServiceReference newReference = createServiceReference(6L, 1L, 8);
+		ServiceReference<?> newReference = createServiceReference(6L, 1L, 8);
 		ServiceEvent event = new ServiceEvent(ServiceEvent.REGISTERED, newReference);
 		tracked.serviceChanged(event);
 		assertArrayEquals(new Long[] { 2L, 5L }, customizer.getServiceReferenceIds());
@@ -133,7 +134,7 @@ public class TrackedTest {
 		assertArrayEquals(new Long[] { 5L, 4L }, customizer.getServiceReferenceIds());	
 		
 		// create a service event that registers a higher ranked aspect for service with id 1.
-		ServiceReference higherRankedReference = createServiceReference(7L, 1L, 15);
+		ServiceReference<?> higherRankedReference = createServiceReference(7L, 1L, 15);
 		ServiceEvent addHigherRankedEvent = new ServiceEvent(ServiceEvent.REGISTERED, higherRankedReference);
 		tracked.serviceChanged(addHigherRankedEvent);
 		assertArrayEquals(new Long[] { 5L, 7L }, customizer.getServiceReferenceIds());	
@@ -165,11 +166,11 @@ public class TrackedTest {
 		return context;
 	}
 	
-	private ServiceReference createServiceReference(Long serviceId) {
+	private ServiceReference<?> createServiceReference(Long serviceId) {
 		return createServiceReference(serviceId, null, null);
 	}
 
-	private ServiceReference createServiceReference(Long serviceId, Long aspectId, Integer ranking) {
+	private ServiceReference<?> createServiceReference(Long serviceId, Long aspectId, Integer ranking) {
 		return new TestServiceReference(serviceId, aspectId, ranking);
 	}
 
@@ -183,7 +184,7 @@ public class TrackedTest {
 	
 	class TestCustomizer implements ServiceTrackerCustomizer {
 		
-		List<ServiceReference> serviceReferences = new ArrayList<>();
+		List<ServiceReference<?>> serviceReferences = new ArrayList<>();
 
 		@Override
 		public Object addingService(ServiceReference reference) {

Modified: felix/trunk/dependencymanager/release/resources/deps/NOTICE
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/release/resources/deps/NOTICE?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/release/resources/deps/NOTICE (original)
+++ felix/trunk/dependencymanager/release/resources/deps/NOTICE Mon Feb  6 14:37:49 2017
@@ -1,5 +1,5 @@
 Apache Felix Dependency Manager
-Copyright 2011-2015 The Apache Software Foundation
+Copyright 2011-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
@@ -7,14 +7,10 @@ Licensed under the Apache License 2.0.
 
 This product includes software developed at The OSGi 
 Alliance (http://www.osgi.org/).
-Copyright: (c) OSGi Alliance (2000, 2015)
+Copyright: (c) OSGi Alliance (2000, 2017)
 Copyright (c) 2000 Gatespace AB. All Rights Reserved.
 Licensed under the Apache License 2.0.
 
-This product includes software from http://www.json.org.
-Copyright (c) 2002 JSON.org
-Licensed under the JSON License
-
 This product includes software from (http://junit.org),
 Licensed under the Eclipse Public License - v 1.0.