You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2017/02/02 09:33:47 UTC

svn commit: r1781360 [1/2] - in /felix/trunk/osgi-r7/scr/src: main/java/org/apache/felix/scr/impl/inject/ main/java/org/apache/felix/scr/impl/inject/field/ main/java/org/apache/felix/scr/impl/inject/methods/ main/java/org/apache/felix/scr/impl/manager/...

Author: cziegeler
Date: Thu Feb  2 09:33:47 2017
New Revision: 1781360

URL: http://svn.apache.org/viewvc?rev=1781360&view=rev
Log:
FELIX--5457 : Logger Support. Remove additional SimpleLogger argument where possible

Modified:
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ActivatorParameter.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/BindParameters.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethodImpl.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/DuplexReferenceMethods.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/LifecycleMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ReferenceMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/ActivateMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BaseMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BindMethod.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RefPair.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleRefPair.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/xml/XmlConstants.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/xml/XmlHandler.java
    felix/trunk/osgi-r7/scr/src/test/java/org/apache/felix/scr/impl/inject/BindMethodTest.java
    felix/trunk/osgi-r7/scr/src/test/java/org/apache/felix/scr/impl/inject/methods/ActivateMethodTest.java

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ActivatorParameter.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ActivatorParameter.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ActivatorParameter.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ActivatorParameter.java Thu Feb  2 09:33:47 2017
@@ -18,26 +18,18 @@
  */
 package org.apache.felix.scr.impl.inject;
 
-import org.osgi.service.component.ComponentContext;
+import org.apache.felix.scr.impl.manager.ComponentContextImpl;
 
-public final class ActivatorParameter
+public final class ActivatorParameter extends BaseParameter
 {
-    private final ComponentContext m_componentContext;
     private final int m_reason;
 
-    public ActivatorParameter( ComponentContext componentContext, int reason )
+    public ActivatorParameter( ComponentContextImpl<?> componentContext, int reason )
     {
-        this.m_componentContext = componentContext;
+        super(componentContext);
         this.m_reason = reason;
     }
 
-
-    public ComponentContext getComponentContext()
-    {
-        return m_componentContext;
-    }
-
-
     public int getReason()
     {
         return m_reason;

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/BindParameters.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/BindParameters.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/BindParameters.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/BindParameters.java Thu Feb  2 09:33:47 2017
@@ -18,37 +18,32 @@
  */
 package org.apache.felix.scr.impl.inject;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.apache.felix.scr.impl.manager.ComponentContextImpl;
 import org.apache.felix.scr.impl.manager.RefPair;
 import org.osgi.framework.BundleContext;
 
-public class BindParameters
+public class BindParameters extends BaseParameter
 {
 
-    private final ComponentContextImpl<?> componentContext;
     private final RefPair<?, ?> refPair;
     public BindParameters(ComponentContextImpl<?> componentContext, RefPair<?, ?> refPair)
     {
-        this.componentContext = componentContext;
+        super(componentContext);
         this.refPair = refPair;
     }
 
-    public ComponentContextImpl<?> getComponentContext()
-    {
-        return componentContext;
-    }
-
     public RefPair getRefPair()
     {
         return refPair;
     }
 
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     public Object getServiceObject() {
-    	return refPair.getServiceObject((ComponentContextImpl) componentContext);
+    	return refPair.getServiceObject((ComponentContextImpl)this.getComponentContext());
     }
 
-    public boolean getServiceObject(BundleContext context, SimpleLogger logger) {
-    	return refPair.getServiceObject((ComponentContextImpl) componentContext, context, logger);
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public boolean getServiceObject(BundleContext context) {
+    	return refPair.getServiceObject((ComponentContextImpl)this.getComponentContext(), context);
     }
 }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethod.java Thu Feb  2 09:33:47 2017
@@ -20,13 +20,12 @@ package org.apache.felix.scr.impl.inject
 
 import java.util.Map;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.apache.felix.scr.impl.manager.ComponentContextImpl;
 import org.apache.felix.scr.impl.manager.DependencyManager;
 
 /**
  * This object describes a constructor for a component.
- * The name ConstructorMethod has been chosen to avoid a clash with the 
+ * The name ConstructorMethod has been chosen to avoid a clash with the
  * existing Constructor class.
  */
 public interface ConstructorMethod<T> {
@@ -35,27 +34,25 @@ public interface ConstructorMethod<T> {
 		public DependencyManager<S, ?> dependencyManager;
 		public DependencyManager.OpenStatus<S, ?> openStatus;
     }
-	
+
 	/**
 	 * Create a new instance
 	 * @param componentClass The implementation class of the component
 	 * @param componentContext The component context
-	 * @param logger A logger 
+	 * @param logger A logger
 	 * @return The instance
 	 */
     <S> T newInstance(Class<T> componentClass,
     		           ComponentContextImpl<T> componentContext,
-    		           Map<Integer, ReferencePair<S>> parameterMap,
-                       SimpleLogger logger )
+    		           Map<Integer, ReferencePair<S>> parameterMap)
     throws Exception;
-    
+
     public ConstructorMethod<Object> DEFAULT = new ConstructorMethod<Object>() {
-		
+
 		@Override
-		public <S> Object newInstance(Class<Object> componentClass, 
-				ComponentContextImpl<Object> componentContext, 
-				Map<Integer, ReferencePair<S>> parameterMap,
-				SimpleLogger logger) 
+		public <S> Object newInstance(Class<Object> componentClass,
+				ComponentContextImpl<Object> componentContext,
+				Map<Integer, ReferencePair<S>> parameterMap)
 				throws Exception
 		{
             // 112.4.4 The class must be public and have a public constructor without arguments so component instances

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethodImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethodImpl.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethodImpl.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ConstructorMethodImpl.java Thu Feb  2 09:33:47 2017
@@ -22,7 +22,6 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.util.Map;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.apache.felix.scr.impl.inject.ValueUtils.ValueType;
 import org.apache.felix.scr.impl.inject.field.FieldUtils;
 import org.apache.felix.scr.impl.manager.ComponentContextImpl;
@@ -46,9 +45,8 @@ public class ConstructorMethodImpl<T> im
     @Override
     public <S> T newInstance(Class<T> componentClass,
             ComponentContextImpl<T> componentContext,
-            Map<Integer, ReferencePair<S>> parameterMap,
-            SimpleLogger logger)
-                    throws Exception
+            Map<Integer, ReferencePair<S>> parameterMap)
+    throws Exception
     {
         if ( !m_initialized ) {
             // activation fields
@@ -60,7 +58,7 @@ public class ConstructorMethodImpl<T> im
                 int index = 0;
                 for(final String fieldName : componentContext.getComponentMetadata().getActivationFields() )
                 {
-                    final FieldUtils.FieldSearchResult result = FieldUtils.searchField(componentClass, fieldName, logger);
+                    final FieldUtils.FieldSearchResult result = FieldUtils.searchField(componentClass, fieldName, componentContext.getLogger());
                     if ( result == null || result.field == null )
                     {
                         m_paramTypes[index] = null;
@@ -106,7 +104,7 @@ public class ConstructorMethodImpl<T> im
                     }
                     else
                     {
-                        m_constructorArgTypes[i] = ValueUtils.getReferenceValueType(componentClass, reference, argTypes[i], null, logger);
+                        m_constructorArgTypes[i] = ValueUtils.getReferenceValueType(componentClass, reference, argTypes[i], null, componentContext.getLogger());
                     }
                     if ( m_constructorArgTypes[i] == ValueType.ignore )
                     {
@@ -149,7 +147,8 @@ public class ConstructorMethodImpl<T> im
             {
                 // TODO - get ref pair
                 final ReferencePair<S> pair = parameterMap.get(i);
-                args[i] = ValueUtils.getValue(m_constructorArgTypes[i],
+                args[i] = ValueUtils.getValue(componentClass.getName(),
+                        m_constructorArgTypes[i],
                         m_constructor.getParameterTypes()[i],
                         componentContext,
                         null);
@@ -159,7 +158,7 @@ public class ConstructorMethodImpl<T> im
         else
         {
             component = (T)ConstructorMethod.DEFAULT.newInstance((Class<Object>)componentClass,
-                    (ComponentContextImpl<Object>)componentContext, null, logger);
+                    (ComponentContextImpl<Object>)componentContext, null);
         }
 
         // activation fields
@@ -167,11 +166,12 @@ public class ConstructorMethodImpl<T> im
         {
             if ( m_paramTypes[i] != ValueType.ignore )
             {
-                final Object value = ValueUtils.getValue(m_paramTypes[i],
+                final Object value = ValueUtils.getValue(componentClass.getName(),
+                        m_paramTypes[i],
                         m_fields[i].getType(),
                         componentContext,
                         null);
-                FieldUtils.setField(m_fields[i], component, value, logger);
+                FieldUtils.setField(m_fields[i], component, value, componentContext.getLogger());
             }
         }
 

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/DuplexReferenceMethods.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/DuplexReferenceMethods.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/DuplexReferenceMethods.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/DuplexReferenceMethods.java Thu Feb  2 09:33:47 2017
@@ -48,6 +48,7 @@ public class DuplexReferenceMethods impl
         this.unbind = new DuplexReferenceMethod(unbindList);
         this.init = new InitReferenceMethod()
         {
+            @Override
             public boolean init(final Object componentInstance, final SimpleLogger logger)
             {
             	boolean result = true;
@@ -57,7 +58,7 @@ public class DuplexReferenceMethods impl
             		if ( init != null )
             		{
             			result = init.init(componentInstance, logger);
-            			if ( !result ) 
+            			if ( !result )
             			{
             				break;
             			}
@@ -68,21 +69,25 @@ public class DuplexReferenceMethods impl
         };
     }
 
+    @Override
     public ReferenceMethod getBind()
     {
     	return this.bind;
     }
 
+    @Override
     public ReferenceMethod getUnbind()
     {
     	return this.unbind;
     }
 
+    @Override
     public ReferenceMethod getUpdated()
     {
     	return this.updated;
     }
 
+    @Override
     public InitReferenceMethod getInit()
     {
     	return this.init;
@@ -98,15 +103,15 @@ public class DuplexReferenceMethods impl
             this.methods = methods;
         }
 
+        @Override
         public MethodResult invoke(final Object componentInstance,
         		final BindParameters parameters,
-        		final MethodResult methodCallFailureResult,
-        		final SimpleLogger logger) {
+        		final MethodResult methodCallFailureResult) {
         	MethodResult result = null;
-        	for(final ReferenceMethod m : methods) 
+        	for(final ReferenceMethod m : methods)
         	{
-        		result = m.invoke(componentInstance, parameters, methodCallFailureResult, logger);
-        		if ( result == null )        			
+        		result = m.invoke(componentInstance, parameters, methodCallFailureResult);
+        		if ( result == null )
         		{
         			break;
         		}
@@ -114,17 +119,17 @@ public class DuplexReferenceMethods impl
             return result;
         }
 
+        @Override
         public <S, T> boolean getServiceObject(
         		final BindParameters parameters,
-        		final BundleContext context,
-        		final SimpleLogger logger)
+        		final BundleContext context)
         {
             // only if all return true, we return true
         	boolean result = false;
-        	for(final ReferenceMethod m : methods) 
+        	for(final ReferenceMethod m : methods)
         	{
-        		result = m.getServiceObject(parameters, context, logger);
-        		if (!result )        			
+        		result = m.getServiceObject(parameters, context);
+        		if (!result )
         		{
         			break;
         		}

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/LifecycleMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/LifecycleMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/LifecycleMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/LifecycleMethod.java Thu Feb  2 09:33:47 2017
@@ -18,8 +18,7 @@
  */
 package org.apache.felix.scr.impl.inject;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
-import org.osgi.service.component.ComponentContext;
+import org.apache.felix.scr.impl.manager.ComponentContextImpl;
 
 /**
  * Interface for invocation one of the lifecycle methods:
@@ -32,9 +31,8 @@ import org.osgi.service.component.Compon
 public interface LifecycleMethod {
 
     MethodResult invoke(Object componentInstance,
-                        ComponentContext componentContext,
+                        ComponentContextImpl<?> componentContext,
                         int reason,
-                        MethodResult methodCallFailureResult,
-                        SimpleLogger logger );
+                        MethodResult methodCallFailureResult);
 
 }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ReferenceMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ReferenceMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ReferenceMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ReferenceMethod.java Thu Feb  2 09:33:47 2017
@@ -18,7 +18,6 @@
  */
 package org.apache.felix.scr.impl.inject;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -35,15 +34,13 @@ public interface ReferenceMethod
      * @param logger Logger
      * @return The method result
      */
-	
+
 	<S, T> MethodResult invoke( Object componentInstance,
                          BindParameters parameters,
-                         MethodResult methodCallFailureResult,
-                         SimpleLogger logger );
+                         MethodResult methodCallFailureResult );
 
     <S, T> boolean getServiceObject( BindParameters parameters,
-            BundleContext context,
-            SimpleLogger logger );
+            BundleContext context);
 
     /**
      * A NOP implementation.
@@ -51,17 +48,15 @@ public interface ReferenceMethod
     ReferenceMethod NOPReferenceMethod = new ReferenceMethod() {
 
 		@Override
-		public <S, T> MethodResult invoke(final Object componentInstance, 
+		public <S, T> MethodResult invoke(final Object componentInstance,
 				final BindParameters parameters,
-				final MethodResult methodCallFailureResult, 
-				final SimpleLogger logger) {
+				final MethodResult methodCallFailureResult) {
 			return MethodResult.VOID;
 		}
 
 		@Override
 		public <S, T> boolean getServiceObject(final BindParameters parameters,
-				final BundleContext context, 
-				final SimpleLogger logger) {
+				final BundleContext context) {
 			return true;
 		}
     };

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/ValueUtils.java Thu Feb  2 09:33:47 2017
@@ -19,6 +19,8 @@
 package org.apache.felix.scr.impl.inject;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Map;
 
@@ -37,6 +39,7 @@ public class ValueUtils {
 
     private static final String LOGGER_CLASS = "org.osgi.service.log.Logger";
     private static final String FORMATTER_LOGGER_CLASS = "org.osgi.service.log.FormatterLogger";
+    private static final String LOGGER_FACTORY_CLASS = "org.osgi.service.log.LoggerFactory";
 
     /**
      * The value type of the field, activation field or constructor parameter
@@ -48,13 +51,13 @@ public class ValueUtils {
         bundleContext,          // field activation, constructor
         config_map,             // field activation, constructor
         config_annotation,      // field activation, constructor
-        logger,                 // TODO
-        formatterLogger,        // TODO
+        ref_logger,             // reference (field, constructor, method)
+        ref_formatterLogger,    // reference (field, constructor, method)
         ref_serviceReference,   // reference (field, constructor, method)
         ref_serviceObjects,     // reference (field, constructor, method)
         ref_serviceType,        // reference (field, constructor, method)
         ref_map,                // reference (field, constructor, method)
-        ref_tuple               // reference (field, constructor ??)
+        ref_tuple               // reference (field, constructor ??) // TDODO
     }
 
     /** Empty array. */
@@ -81,14 +84,6 @@ public class ValueUtils {
         {
             return ValueType.config_map;
         }
-        else if ( typeClass.getName().equals(LOGGER_CLASS) )
-        {
-            return ValueType.logger;
-        }
-        else if ( typeClass.getName().equals(FORMATTER_LOGGER_CLASS) )
-        {
-            return ValueType.formatterLogger;
-        }
         else
         {
             return ValueType.config_annotation;
@@ -96,11 +91,12 @@ public class ValueUtils {
     }
 
     /**
-     * Get the value type of the reference for a field/constructor
+     * Get the value type of the reference for a field/constructor argument
+     *
      * @param componentClass The component class declaring the reference
      * @param metadata The reference metadata
      * @param typeClass The type of the field/parameter
-     * @param f The optional field. If null, this is a constructor reference
+     * @param f The optional field. If {@code null} this is a constructor reference
      * @param logger The logger
      * @return The value type for the field. If invalid, {@code ValueType#ignore}
      */
@@ -119,26 +115,41 @@ public class ValueUtils {
         // unary reference
         if ( !metadata.isMultiple() )
         {
+            // service interface or supertype
             if ( typeClass.isAssignableFrom(referenceType) )
             {
                 valueType = ValueType.ref_serviceType;
             }
+            // service reference
             else if ( typeClass == ClassUtils.SERVICE_REFERENCE_CLASS )
             {
                 valueType = ValueType.ref_serviceReference;
             }
+            // components service object
             else if ( typeClass == ClassUtils.COMPONENTS_SERVICE_OBJECTS_CLASS )
             {
                 valueType = ValueType.ref_serviceObjects;
             }
+            // map (properties)
             else if ( typeClass == ClassUtils.MAP_CLASS )
             {
                 valueType = ValueType.ref_map;
             }
+            // tuple (map.entry)
             else if ( typeClass == ClassUtils.MAP_ENTRY_CLASS )
             {
                 valueType = ValueType.ref_tuple;
             }
+            // 1.4: Logger - reference needs to be of type LoggerFactory
+            else if ( typeClass.getName().equals(LOGGER_CLASS) && metadata.getInterface().equals(LOGGER_FACTORY_CLASS) )
+            {
+                return ValueType.ref_logger;
+            }
+            // 1.4: FormatterLogger - reference needs to be of type LoggerFactory
+            else if ( typeClass.getName().equals(FORMATTER_LOGGER_CLASS) && metadata.getInterface().equals(LOGGER_FACTORY_CLASS) )
+            {
+                return ValueType.ref_formatterLogger;
+            }
             else
             {
                 if ( field != null )
@@ -249,6 +260,7 @@ public class ValueUtils {
 
     /**
      * Get the value for the value type
+     * @param componentType The class of the component
      * @param type The value type
      * @param targetType Optional target type, only required for type {@code ValueType#config_annotation}.
      * @param componentContext The component context
@@ -256,7 +268,9 @@ public class ValueUtils {
      * @return The value or {@code null}.
      */
     @SuppressWarnings("unchecked")
-    public static Object getValue( final ValueType type,
+    public static Object getValue(
+            final String componentType,
+            final ValueType type,
             final Class<?> targetType,
             @SuppressWarnings("rawtypes") final ComponentContextImpl componentContext,
             final RefPair<?, ?> refPair)
@@ -264,28 +278,68 @@ public class ValueUtils {
         final Object value;
         switch ( type )
         {
-            case ignore : value = null; break;
-            case componentContext : value = componentContext; break;
-            case bundleContext : value = componentContext.getBundleContext(); break;
-            case config_map : // note: getProperties() returns a ReadOnlyDictionary which is a Map
-                value = componentContext.getProperties(); break;
-            case config_annotation : value = Annotations.toObject(targetType,
-                (Map<String, Object>) componentContext.getProperties(),
-                componentContext.getBundleContext().getBundle(), componentContext.getComponentMetadata().isConfigureWithInterfaces());
-                break;
-            case ref_serviceType : value = refPair.getServiceObject(componentContext); break;
-            case ref_serviceReference : value = refPair.getRef(); break;
-            case ref_serviceObjects : value = componentContext.getComponentServiceObjectsHelper().getServiceObjects(refPair.getRef()); break;
-            case ref_map : value = new ReadOnlyDictionary( refPair.getRef() ); break;
-            case ref_tuple : final Object tupleKey = new ReadOnlyDictionary( refPair.getRef() );
-                final Object tupleValue = refPair.getServiceObject(componentContext);
-                value = new MapEntryImpl(tupleKey, tupleValue, refPair.getRef());
-                break;
+            case ignore                 : value = null;
+                                          break;
+            case componentContext       : value = componentContext;
+                                          break;
+            case bundleContext          : value = componentContext.getBundleContext();
+                                          break;
+            case config_map             : // note: getProperties() returns a ReadOnlyDictionary which is a Map
+                                          value = componentContext.getProperties();
+                                          break;
+            case config_annotation      : value = Annotations.toObject(targetType,
+                                                (Map<String, Object>) componentContext.getProperties(),
+                                          componentContext.getBundleContext().getBundle(), componentContext.getComponentMetadata().isConfigureWithInterfaces());
+                                          break;
+            case ref_serviceType        : value = refPair.getServiceObject(componentContext);
+                                          break;
+            case ref_serviceReference   : value = refPair.getRef();
+                                          break;
+            case ref_serviceObjects     : value = componentContext.getComponentServiceObjectsHelper().getServiceObjects(refPair.getRef());
+                                          break;
+            case ref_map                : value = new ReadOnlyDictionary( refPair.getRef() );
+                                          break;
+            case ref_tuple              : final Object tupleKey = new ReadOnlyDictionary( refPair.getRef() );
+                                          final Object tupleValue = refPair.getServiceObject(componentContext);
+                                          value = new MapEntryImpl(tupleKey, tupleValue, refPair.getRef());
+                                          break;
+            case ref_logger             :
+            case ref_formatterLogger    : value = getLogger(componentType, targetType, componentContext, refPair);
+                                          break;
             default: value = null;
         }
         return value;
     }
 
+    private static Object getLogger(String componentType,
+            final Class<?> targetType,
+            @SuppressWarnings("rawtypes") final ComponentContextImpl componentContext,
+            final RefPair<?, ?> refPair )
+    {
+        @SuppressWarnings("unchecked")
+        final Object factory = refPair.getServiceObject(componentContext);
+        if ( factory != null )
+        {
+            Exception error = null;
+            try {
+                final Method m = factory.getClass().getMethod("getLogger", new Class[] {String.class, Class.class});
+                return m.invoke(factory, new Object[] {componentType, targetType});
+            } catch (NoSuchMethodException e) {
+                error = e;
+            } catch (SecurityException e) {
+                error = e;
+            } catch (IllegalAccessException e) {
+                error = e;
+            } catch (IllegalArgumentException e) {
+                error = e;
+            } catch (InvocationTargetException e) {
+                error = e;
+            }
+            componentContext.getLogger().log( LogService.LOG_ERROR, "Unexpected error while trying to get logger.", null, error );
+        }
+        return null;
+    }
+
     /**
      * Comparable map entry using the service reference to compare.
      */

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/field/FieldHandler.java Thu Feb  2 09:33:47 2017
@@ -70,6 +70,7 @@ public class FieldHandler
         new Comparator<RefPair<?, ?>>()
         {
 
+            @Override
             public int compare(final RefPair<?, ?> o1, final RefPair<?, ?> o2)
             {
                 return o1.getRef().compareTo(o2.getRef());
@@ -182,8 +183,7 @@ public class FieldHandler
 
     private MethodResult updateField(final METHOD_TYPE mType,
                                      final Object componentInstance,
-                                     final BindParameters bp,
-                                     final SimpleLogger logger )
+                                     final BindParameters bp)
         throws InvocationTargetException
     {
         @SuppressWarnings("rawtypes")
@@ -218,7 +218,8 @@ public class FieldHandler
             		{
             			return MethodResult.REACTIVATE;
             		}
-                    final Object obj = ValueUtils.getValue(valueType, field.getType(), key, refPair);
+                    final Object obj = ValueUtils.getValue(componentInstance.getClass().getName(),
+                            valueType, field.getType(), key, refPair);
                     this.setFieldValue(componentInstance, obj);
                     this.boundValues.put(refPair, obj);
             	}
@@ -226,7 +227,8 @@ public class FieldHandler
             // bind needs always be done
             else
             {
-                final Object obj = ValueUtils.getValue(valueType, field.getType(), key, refPair);
+                final Object obj = ValueUtils.getValue(componentInstance.getClass().getName(),
+                        valueType, field.getType(), key, refPair);
                 this.setFieldValue(componentInstance, obj);
                 this.boundValues.put(refPair, obj);
             }
@@ -238,7 +240,8 @@ public class FieldHandler
             // bind: replace or update the field
             if ( mType == METHOD_TYPE.BIND )
             {
-                final Object obj = ValueUtils.getValue(valueType, field.getType(), key, refPair);
+                final Object obj = ValueUtils.getValue(componentInstance.getClass().getName(),
+                        valueType, field.getType(), key, refPair);
                 this.boundValues.put(refPair, obj);
                 if ( metadata.isReplace() )
                 {
@@ -276,7 +279,8 @@ public class FieldHandler
             	{
                     if ( !this.metadata.isStatic() )
                     {
-	                    final Object obj = ValueUtils.getValue(valueType, field.getType(), key, refPair);
+	                    final Object obj = ValueUtils.getValue(componentInstance.getClass().getName(),
+	                            valueType, field.getType(), key, refPair);
 	                    final Object oldObj = this.boundValues.put(refPair, obj);
 
 	                    if ( metadata.isReplace() )
@@ -349,8 +353,7 @@ public class FieldHandler
         MethodResult invoke( final FieldHandler handler,
                 final METHOD_TYPE mType,
                 final Object componentInstance,
-                final BindParameters rawParameter,
-                final SimpleLogger logger )
+                final BindParameters rawParameter)
         throws InvocationTargetException;
 
         boolean fieldExists( final FieldHandler handler, final SimpleLogger logger);
@@ -370,28 +373,28 @@ public class FieldHandler
 
             // resolve the field
         	final FieldUtils.FieldSearchResult result = FieldUtils.searchField( handler.componentClass, handler.metadata.getField(), logger );
-        	if ( result == null ) 
+        	if ( result == null )
         	{
-        		handler.field = null;         
+        		handler.field = null;
         		handler.valueType = null;
         		handler.state = NotFound.INSTANCE;
                 logger.log(LogService.LOG_ERROR, "Field [{0}] not found; Component will fail",
                     new Object[] { handler.metadata.getField() }, null);
         	}
-        	else 
+        	else
         	{
         		handler.field = result.field;
-            	if ( !result.usable ) 
+            	if ( !result.usable )
             	{
             		handler.valueType = ValueType.ignore;
             	}
             	else
             	{
-            		handler.valueType = ValueUtils.getReferenceValueType( 
+            		handler.valueType = ValueUtils.getReferenceValueType(
             				handler.componentClass,
             				handler.metadata,
             				result.field.getType(),
-            				result.field, 
+            				result.field,
             				logger );
             	}
                 handler.state = Resolved.INSTANCE;
@@ -400,17 +403,18 @@ public class FieldHandler
         	}
         }
 
+        @Override
         public MethodResult invoke( final FieldHandler handler,
                 final METHOD_TYPE mType,
                 final Object componentInstance,
-                final BindParameters rawParameter,
-                SimpleLogger logger )
+                final BindParameters rawParameter)
         throws InvocationTargetException
         {
-            resolve( handler, logger );
-            return handler.state.invoke( handler, mType, componentInstance, rawParameter, logger );
+            resolve( handler, rawParameter.getLogger() );
+            return handler.state.invoke( handler, mType, componentInstance, rawParameter );
         }
 
+        @Override
         public boolean fieldExists( final FieldHandler handler, final SimpleLogger logger)
         {
             resolve( handler, logger );
@@ -425,17 +429,18 @@ public class FieldHandler
     {
         private static final State INSTANCE = new NotFound();
 
+        @Override
         public MethodResult invoke( final FieldHandler handler,
                 final METHOD_TYPE mType,
                 final Object componentInstance,
-                final BindParameters rawParameter,
-                final SimpleLogger logger )
+                final BindParameters rawParameter)
         {
-            logger.log( LogService.LOG_ERROR, "Field [{0}] not found", new Object[]
+            rawParameter.getLogger().log( LogService.LOG_ERROR, "Field [{0}] not found", new Object[]
                 { handler.metadata.getField() }, null );
             return null;
         }
 
+        @Override
         public boolean fieldExists( final FieldHandler handler, final SimpleLogger logger)
         {
             return false;
@@ -449,16 +454,17 @@ public class FieldHandler
     {
         private static final State INSTANCE = new Resolved();
 
+        @Override
         public MethodResult invoke( final FieldHandler handler,
                 final METHOD_TYPE mType,
                 final Object componentInstance,
-                final BindParameters rawParameter,
-                final SimpleLogger logger )
+                final BindParameters rawParameter)
             throws InvocationTargetException
         {
-            return handler.updateField( mType, componentInstance, rawParameter, logger );
+            return handler.updateField( mType, componentInstance, rawParameter );
         }
 
+        @Override
         public boolean fieldExists( final FieldHandler handler, final SimpleLogger logger)
         {
             return true;
@@ -484,10 +490,10 @@ public class FieldHandler
             this.handler = handler;
         }
 
+        @Override
         public <S, T> MethodResult invoke(final Object componentInstance,
                 final BindParameters rawParameter,
-                final MethodResult methodCallFailureResult,
-                final SimpleLogger logger)
+                final MethodResult methodCallFailureResult)
         {
             if ( handler.valueType == ValueType.ignore )
             {
@@ -499,31 +505,30 @@ public class FieldHandler
                 return handler.state.invoke( handler,
                         methodType,
                         componentInstance,
-                        rawParameter,
-                        logger );
+                        rawParameter);
             }
             catch ( final InvocationTargetException ite )
             {
-                logger.log( LogService.LOG_ERROR, "The {0} field has thrown an exception", new Object[]
+                rawParameter.getLogger().log( LogService.LOG_ERROR, "The {0} field has thrown an exception", new Object[]
                     { handler.metadata.getField() }, ite.getCause() );
             }
 
             return methodCallFailureResult;
         }
 
+        @Override
         public <S, T> boolean getServiceObject(
                 final BindParameters rawParameter,
-                final BundleContext context,
-                final SimpleLogger logger)
+                final BundleContext context)
         {
             if ( methodType != METHOD_TYPE.UNBIND )
             {
                 //??? this resolves which we need.... better way?
                 if ( rawParameter.getServiceObject() == null
-                  && handler.fieldExists( logger )
+                  && handler.fieldExists( rawParameter.getLogger() )
                   && (handler.valueType == ValueType.ref_serviceType || handler.valueType == ValueType.ref_tuple ) )
                 {
-                    return rawParameter.getServiceObject(context, logger);
+                    return rawParameter.getServiceObject(context);
                 }
             }
             return true;
@@ -554,6 +559,7 @@ public class FieldHandler
         return new InitReferenceMethod()
         {
 
+            @Override
             public boolean init(final Object componentInstance, final SimpleLogger logger)
             {
                 if ( fieldExists( logger ) )

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/ActivateMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/ActivateMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/ActivateMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/ActivateMethod.java Thu Feb  2 09:33:47 2017
@@ -33,8 +33,8 @@ import org.apache.felix.scr.impl.inject.
 import org.apache.felix.scr.impl.inject.ClassUtils;
 import org.apache.felix.scr.impl.inject.LifecycleMethod;
 import org.apache.felix.scr.impl.inject.MethodResult;
+import org.apache.felix.scr.impl.manager.ComponentContextImpl;
 import org.apache.felix.scr.impl.metadata.DSVersion;
-import org.osgi.service.component.ComponentContext;
 import org.osgi.service.log.LogService;
 
 
@@ -42,7 +42,7 @@ public class ActivateMethod extends Base
 {
 
     protected final boolean m_supportsInterfaces;
-    
+
     public ActivateMethod( final String methodName,
             final boolean methodRequired,
             final Class<?> componentClass,
@@ -200,6 +200,7 @@ public class ActivateMethod extends Base
         }
         Collections.sort(result, new Comparator<Method>(){
 
+            @Override
             public int compare(Method m1, Method m2)
             {
                 final int l1 = m1.getParameterTypes().length;
@@ -290,23 +291,22 @@ public class ActivateMethod extends Base
     /**
      * @see org.apache.felix.scr.impl.inject.LifecycleMethod#invoke(java.lang.Object, org.osgi.service.component.ComponentContext, int, org.apache.felix.scr.impl.inject.MethodResult, org.apache.felix.scr.impl.helper.SimpleLogger)
      */
-    public MethodResult invoke(final Object componentInstance, 
-    		final ComponentContext componentContext, 
-    		final int reason, 
-    		final MethodResult methodCallFailureResult, 
-    		final SimpleLogger logger) {
-        return invoke(componentInstance, new ActivatorParameter(componentContext, reason), methodCallFailureResult, logger);
+    @Override
+    public MethodResult invoke(final Object componentInstance,
+    		final ComponentContextImpl<?> componentContext,
+    		final int reason,
+    		final MethodResult methodCallFailureResult) {
+        return invoke(componentInstance, new ActivatorParameter(componentContext, reason), methodCallFailureResult);
     }
 
     @Override
-    public MethodResult invoke(final  Object componentInstance, 
+    public MethodResult invoke(final  Object componentInstance,
     		final ActivatorParameter rawParameter,
-    		final MethodResult methodCallFailureResult, 
-    		final SimpleLogger logger )
+    		final MethodResult methodCallFailureResult)
     {
-        if (methodExists( logger ))
+        if (methodExists( rawParameter.getLogger() ))
         {
-            return super.invoke(componentInstance, rawParameter, methodCallFailureResult, logger );
+            return super.invoke(componentInstance, rawParameter, methodCallFailureResult );
         }
         return null;
     }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BaseMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BaseMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BaseMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BaseMethod.java Thu Feb  2 09:33:47 2017
@@ -28,6 +28,7 @@ import java.util.Arrays;
 import java.util.Map;
 
 import org.apache.felix.scr.impl.helper.SimpleLogger;
+import org.apache.felix.scr.impl.inject.BaseParameter;
 import org.apache.felix.scr.impl.inject.ClassUtils;
 import org.apache.felix.scr.impl.inject.MethodResult;
 import org.apache.felix.scr.impl.metadata.DSVersion;
@@ -37,7 +38,7 @@ import org.osgi.service.log.LogService;
 /**
  * Component method to be invoked on service (un)binding.
  */
-public abstract class BaseMethod<P>
+public abstract class BaseMethod<P extends BaseParameter>
 {
 
     private final DSVersion dsVersion;
@@ -212,7 +213,7 @@ public abstract class BaseMethod<P>
             final boolean acceptPackage, SimpleLogger logger ) throws SuitableMethodNotAccessibleException, InvocationTargetException;
 
 
-    private MethodResult invokeMethod(final Object componentInstance, final P rawParameter, SimpleLogger logger )
+    private MethodResult invokeMethod(final Object componentInstance, final P rawParameter )
             throws InvocationTargetException
     {
         try
@@ -220,23 +221,23 @@ public abstract class BaseMethod<P>
             if ( componentInstance != null )
             {
                 final Object[] params = getParameters(m_method, rawParameter);
-                logger.log( LogService.LOG_DEBUG, "invoking {0}: {1}: parameters {2}", new Object[]
+                rawParameter.getLogger().log( LogService.LOG_DEBUG, "invoking {0}: {1}: parameters {2}", new Object[]
                         { getMethodNamePrefix(), getMethodName(), Arrays.asList( params ) }, null );
                 Object result = m_method.invoke(componentInstance, params);
-                logger.log( LogService.LOG_DEBUG, "invoked {0}: {1}", new Object[]
+                rawParameter.getLogger().log( LogService.LOG_DEBUG, "invoked {0}: {1}", new Object[]
                         { getMethodNamePrefix(), getMethodName() }, null );
                 return new MethodResult((m_method.getReturnType() != Void.TYPE), (Map<String, Object>) result);
             }
             else
             {
-                logger.log( LogService.LOG_WARNING, "Method {0}: {1} cannot be called on null object",
+                rawParameter.getLogger().log( LogService.LOG_WARNING, "Method {0}: {1} cannot be called on null object",
                         new Object[]
                                 { getMethodNamePrefix(), getMethodName() }, null );
             }
         }
         catch ( IllegalStateException ise )
         {
-            logger.log( LogService.LOG_DEBUG, ise.getMessage(), null );
+            rawParameter.getLogger().log( LogService.LOG_DEBUG, ise.getMessage(), null );
             return null;
         }
         catch ( IllegalAccessException ex )
@@ -244,7 +245,7 @@ public abstract class BaseMethod<P>
             // 112.3.1 If the method is not is not declared protected or
             // public, SCR must log an error message with the log service,
             // if present, and ignore the method
-            logger.log( LogService.LOG_DEBUG, "Method {0} cannot be called", new Object[]
+            rawParameter.getLogger().log( LogService.LOG_DEBUG, "Method {0} cannot be called", new Object[]
                     { getMethodName() }, ex );
         }
         catch ( InvocationTargetException ex )
@@ -496,15 +497,15 @@ public abstract class BaseMethod<P>
      *      found and called, but the method threw an exception.
      */
     public MethodResult invoke( final Object componentInstance, final P rawParameter,
-            final MethodResult methodCallFailureResult, SimpleLogger logger )
+            final MethodResult methodCallFailureResult )
     {
         try
         {
-            return m_state.invoke( this, componentInstance, rawParameter, logger );
+            return m_state.invoke( this, componentInstance, rawParameter );
         }
         catch ( InvocationTargetException ite )
         {
-            logger.log( LogService.LOG_ERROR, "The {0} method has thrown an exception", new Object[]
+            rawParameter.getLogger().log( LogService.LOG_ERROR, "The {0} method has thrown an exception", new Object[]
                     { getMethodName() }, ite.getCause() );
             if ( methodCallFailureResult != null && methodCallFailureResult.getResult() != null )
             {
@@ -524,11 +525,11 @@ public abstract class BaseMethod<P>
     private static interface State
     {
 
-        <P> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter, SimpleLogger logger )
+        <P extends BaseParameter> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter )
                 throws InvocationTargetException;
 
 
-        <P> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger );
+        <P extends BaseParameter> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger );
     }
 
     private static class NotApplicable implements State
@@ -538,14 +539,14 @@ public abstract class BaseMethod<P>
 
 
         @Override
-        public <P> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter, SimpleLogger logger )
+        public <P extends BaseParameter> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter )
         {
             return MethodResult.VOID;
         }
 
 
         @Override
-        public <P> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
+        public <P extends BaseParameter> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
         {
             return true;
         }
@@ -556,7 +557,7 @@ public abstract class BaseMethod<P>
         private static final State INSTANCE = new NotResolved();
 
 
-        private synchronized <P> void resolve( final BaseMethod<P> baseMethod, SimpleLogger logger )
+        private synchronized <P extends BaseParameter> void resolve( final BaseMethod<P> baseMethod, SimpleLogger logger )
         {
             logger.log( LogService.LOG_DEBUG, "getting {0}: {1}", new Object[]
                     {baseMethod.getMethodNamePrefix(), baseMethod.getMethodName()}, null );
@@ -578,16 +579,16 @@ public abstract class BaseMethod<P>
 
 
         @Override
-        public <P> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter, SimpleLogger logger )
+        public <P extends BaseParameter> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter )
                 throws InvocationTargetException
         {
-            resolve( baseMethod, logger );
-            return baseMethod.getState().invoke( baseMethod, componentInstance, rawParameter, logger );
+            resolve( baseMethod, rawParameter.getLogger() );
+            return baseMethod.getState().invoke( baseMethod, componentInstance, rawParameter );
         }
 
 
         @Override
-        public <P> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
+        public <P extends BaseParameter> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
         {
             resolve( baseMethod, logger );
             return baseMethod.getState().methodExists( baseMethod, logger );
@@ -600,19 +601,19 @@ public abstract class BaseMethod<P>
 
 
         @Override
-        public <P> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter, SimpleLogger logger )
+        public <P extends BaseParameter> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter )
         {
             // 112.3.1 If the method is not found , SCR must log an error
             // message with the log service, if present, and ignore the
             // method
-            logger.log( LogService.LOG_ERROR, "{0} method [{1}] not found", new Object[]
+            rawParameter.getLogger().log( LogService.LOG_ERROR, "{0} method [{1}] not found", new Object[]
                     { baseMethod.getMethodNamePrefix(), baseMethod.getMethodName() }, null );
             return null;
         }
 
 
         @Override
-        public <P> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
+        public <P extends BaseParameter> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
         {
             return false;
         }
@@ -624,15 +625,15 @@ public abstract class BaseMethod<P>
 
 
         @Override
-        public <P> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter, SimpleLogger logger )
+        public <P extends BaseParameter> MethodResult invoke( final BaseMethod<P> baseMethod, final Object componentInstance, final P rawParameter )
                 throws InvocationTargetException
         {
-            return baseMethod.invokeMethod( componentInstance, rawParameter, logger );
+            return baseMethod.invokeMethod( componentInstance, rawParameter );
         }
 
 
         @Override
-        public <P> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
+        public <P extends BaseParameter> boolean methodExists( final BaseMethod<P> baseMethod, SimpleLogger logger )
         {
             return true;
         }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BindMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BindMethod.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BindMethod.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/inject/methods/BindMethod.java Thu Feb  2 09:33:47 2017
@@ -468,7 +468,7 @@ implements org.apache.felix.scr.impl.inj
             }
 
             // Get the parameters for the current method
-            Class[] parameters = method.getParameterTypes();
+            Class<?>[] parameters = method.getParameterTypes();
 
             // Select only the methods that receive a single
             // parameter
@@ -577,7 +577,7 @@ implements org.apache.felix.scr.impl.inj
         for ( int i = 0; i < candidateBindMethods.length; i++ )
         {
             final Method method = candidateBindMethods[i];
-            final Class[] parameters = method.getParameterTypes();
+            final Class<?>[] parameters = method.getParameterTypes();
             if ( parameters.length == 2 && method.getName().equals( getMethodName() ) )
             {
 
@@ -634,13 +634,13 @@ implements org.apache.felix.scr.impl.inj
     }
 
     @Override
-    public <S, T> boolean getServiceObject( final BindParameters parameters, BundleContext context, SimpleLogger logger )
+    public <S, T> boolean getServiceObject( final BindParameters parameters, BundleContext context )
     {
         //??? this resolves which we need.... better way?
-        if ( parameters.getServiceObject() == null && methodExists( logger ) )
+        if ( parameters.getServiceObject() == null && methodExists( parameters.getComponentContext().getLogger() ) )
         {
             if ( m_paramTypes.contains(ValueUtils.ValueType.ref_serviceType) ) {
-                return parameters.getServiceObject(context, logger);
+                return parameters.getServiceObject(context);
             }
         }
         return true;
@@ -655,7 +655,7 @@ implements org.apache.felix.scr.impl.inj
         int i = 0;
         for ( ValueUtils.ValueType pt: m_paramTypes )
         {
-            result[i++] = ValueUtils.getValue(pt, null, key, refPair);
+            result[i++] = ValueUtils.getValue(getComponentClass().getName(), pt, null, key, refPair);
         }
         return result;
     }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java Thu Feb  2 09:33:47 2017
@@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.felix.scr.component.ExtComponentContext;
 import org.apache.felix.scr.impl.helper.ComponentServiceObjectsHelper;
 import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
+import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -48,7 +49,7 @@ public class ComponentContextImpl<S> imp
     private final ComponentInstance<S> m_componentInstance = new ComponentInstanceImpl<S>(this);
 
     private final Bundle m_usingBundle;
-    
+
     private volatile ServiceRegistration<S> m_serviceRegistration;
 
     private volatile S m_implementationObject;
@@ -71,7 +72,7 @@ public class ComponentContextImpl<S> imp
         }
         this.serviceObjectsHelper = new ComponentServiceObjectsHelper(usingBundle.getBundleContext());
     }
-    
+
     public void unsetServiceRegistration() {
         m_serviceRegistration = null;
     }
@@ -117,11 +118,12 @@ public class ComponentContextImpl<S> imp
         return m_componentManager;
     }
 
-    public ComponentMetadata getComponentMetadata() 
+    public ComponentMetadata getComponentMetadata()
     {
     	return m_componentManager.getComponentMetadata();
     }
-    
+
+    @Override
     public final Dictionary<String, Object> getProperties()
     {
         // 112.12.3.5 The Dictionary is read-only and cannot be modified
@@ -129,6 +131,7 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public Object locateService( String name )
     {
         m_componentManager.obtainActivationReadLock( );
@@ -144,6 +147,7 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public Object locateService( String name, ServiceReference ref )
     {
         m_componentManager.obtainActivationReadLock(  );
@@ -159,6 +163,7 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public Object[] locateServices( String name )
     {
         m_componentManager.obtainActivationReadLock(  );
@@ -174,24 +179,32 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public BundleContext getBundleContext()
     {
         return m_componentManager.getBundleContext();
     }
 
 
+    @Override
     public Bundle getUsingBundle()
     {
         return m_usingBundle;
     }
 
+    public SimpleLogger getLogger()
+    {
+        return m_componentManager;
+    }
 
+    @Override
     public ComponentInstance<S> getComponentInstance()
     {
         return m_componentInstance;
     }
 
 
+    @Override
     public void enableComponent( String name )
     {
         ComponentActivator activator = m_componentManager.getActivator();
@@ -202,6 +215,7 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public void disableComponent( String name )
     {
         ComponentActivator activator = m_componentManager.getActivator();
@@ -212,6 +226,7 @@ public class ComponentContextImpl<S> imp
     }
 
 
+    @Override
     public ServiceReference<S> getServiceReference()
     {
         return m_serviceRegistration == null? null: m_serviceRegistration.getReference();
@@ -220,6 +235,7 @@ public class ComponentContextImpl<S> imp
 
     //---------- Speculative MutableProperties interface ------------------------------
 
+    @Override
     public void setServiceProperties(Dictionary<String, ?> properties)
     {
         getComponentManager().setServiceProperties(properties );
@@ -269,12 +285,14 @@ public class ComponentContextImpl<S> imp
         }
 
 
+        @Override
         public S getInstance()
         {
             return m_componentContext.getImplementationObject(true);
         }
 
 
+        @Override
         public void dispose()
         {
             m_componentContext.getComponentManager().dispose();

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java Thu Feb  2 09:33:47 2017
@@ -148,6 +148,7 @@ public class DependencyManager<S, T> imp
 
         private volatile Map<ServiceReference<T>, RefPair<S, T>> previousRefMap = EMPTY_REF_MAP;
 
+        @Override
         public void setTracker(ServiceTracker<T, RefPair<S, T>, ExtendedServiceEvent> tracker)
         {
             m_tracker = tracker;
@@ -156,6 +157,7 @@ public class DependencyManager<S, T> imp
             trackerOpened = false;
         }
 
+        @Override
         public boolean isSatisfied()
         {
             ServiceTracker<T, RefPair<S, T>, ExtendedServiceEvent> tracker = getTracker();
@@ -185,6 +187,7 @@ public class DependencyManager<S, T> imp
             return trackerOpened;
         }
 
+        @Override
         public void setTrackerOpened()
         {
             trackerOpened = true;
@@ -205,6 +208,7 @@ public class DependencyManager<S, T> imp
             return previousRefMap;
         }
 
+        @Override
         public void setPreviousRefMap(Map<ServiceReference<T>, RefPair<S, T>> previousRefMap)
         {
             if (previousRefMap != null)
@@ -241,12 +245,14 @@ public class DependencyManager<S, T> imp
     private class FactoryCustomizer extends AbstractCustomizer
     {
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = newRefPair(serviceReference);
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -256,11 +262,13 @@ public class DependencyManager<S, T> imp
             }
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -271,6 +279,7 @@ public class DependencyManager<S, T> imp
             }
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             AtomicInteger trackingCount = new AtomicInteger();
@@ -278,11 +287,13 @@ public class DependencyManager<S, T> imp
             return cardinalitySatisfied(serviceCount);
         }
 
+        @Override
         public void close()
         {
             deactivateTracker();
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             return Collections.emptyList();
@@ -295,6 +306,7 @@ public class DependencyManager<S, T> imp
         private RefPair<S, T> lastRefPair;
         private int lastRefPairTrackingCount;
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = getPreviousRefMap().get(serviceReference);
@@ -305,6 +317,7 @@ public class DependencyManager<S, T> imp
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -348,6 +361,7 @@ public class DependencyManager<S, T> imp
             }
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -362,6 +376,7 @@ public class DependencyManager<S, T> imp
             tracked(trackingCount);
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -393,6 +408,7 @@ public class DependencyManager<S, T> imp
             ungetService(refPair);
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             int serviceCount = 0;
@@ -422,6 +438,7 @@ public class DependencyManager<S, T> imp
             return false;
         }
 
+        @Override
         public void close()
         {
             AtomicInteger trackingCount = new AtomicInteger();
@@ -432,6 +449,7 @@ public class DependencyManager<S, T> imp
             deactivateTracker();
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             if (lastRefPair == null)
@@ -455,12 +473,14 @@ public class DependencyManager<S, T> imp
     private class MultipleStaticGreedyCustomizer extends AbstractCustomizer
     {
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = newRefPair(serviceReference);
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -488,6 +508,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -512,6 +533,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -545,6 +567,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             int serviceCount = 0;
@@ -562,6 +585,7 @@ public class DependencyManager<S, T> imp
             return cardinalitySatisfied(serviceCount);
         }
 
+        @Override
         public void close()
         {
             AtomicInteger trackingCount = new AtomicInteger();
@@ -572,6 +596,7 @@ public class DependencyManager<S, T> imp
             deactivateTracker();
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             ServiceTracker<T, RefPair<S, T>, ExtendedServiceEvent> tracker = getTracker();
@@ -589,12 +614,14 @@ public class DependencyManager<S, T> imp
         private final AtomicReference<Collection<RefPair<S, T>>> refs = new AtomicReference<Collection<RefPair<S, T>>>();
         private int trackingCount;
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = newRefPair(serviceReference);
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -610,6 +637,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -636,6 +664,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -676,6 +705,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             int serviceCount = 0;
@@ -720,6 +750,7 @@ public class DependencyManager<S, T> imp
             return cardinalitySatisfied(serviceCount);
         }
 
+        @Override
         public void close()
         {
             Collection<RefPair<S, T>> refs = this.refs.getAndSet(null);
@@ -733,6 +764,7 @@ public class DependencyManager<S, T> imp
             deactivateTracker();
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             trackingCount.set(this.trackingCount);
@@ -747,6 +779,7 @@ public class DependencyManager<S, T> imp
         private RefPair<S, T> refPair;
         private int trackingCount;
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = getPreviousRefMap().get(serviceReference);
@@ -757,6 +790,7 @@ public class DependencyManager<S, T> imp
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -809,6 +843,7 @@ public class DependencyManager<S, T> imp
             }
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -829,6 +864,7 @@ public class DependencyManager<S, T> imp
             tracked(trackingCount);
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -903,6 +939,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             RefPair<S, T> refPair = null;
@@ -933,6 +970,7 @@ public class DependencyManager<S, T> imp
             return success;
         }
 
+        @Override
         public void close()
         {
             closeRefPair();
@@ -948,6 +986,7 @@ public class DependencyManager<S, T> imp
             refPair = null;
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             Object monitor = getTracker() == null ? null : getTracker().tracked();
@@ -972,12 +1011,14 @@ public class DependencyManager<S, T> imp
         private RefPair<S, T> refPair;
         private int trackingCount;
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> serviceReference)
         {
             RefPair<S, T> refPair = newRefPair(serviceReference);
             return refPair;
         }
 
+        @Override
         public void addedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
@@ -1022,6 +1063,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -1059,6 +1101,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public void removedService(ServiceReference<T> serviceReference, RefPair<S, T> refPair, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -1097,6 +1140,7 @@ public class DependencyManager<S, T> imp
                 new Object[] { getName(), trackingCount, serviceReference }, null);
         }
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             boolean success = cardinalitySatisfied(0);
@@ -1127,6 +1171,7 @@ public class DependencyManager<S, T> imp
             return success;
         }
 
+        @Override
         public void close()
         {
             ServiceTracker<T, RefPair<S, T>, ExtendedServiceEvent> tracker = getTracker();
@@ -1146,6 +1191,7 @@ public class DependencyManager<S, T> imp
             }
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             Object monitor = getTracker() == null ? null : getTracker().tracked();
@@ -1167,52 +1213,63 @@ public class DependencyManager<S, T> imp
     private class NoPermissionsCustomizer implements Customizer<S, T>
     {
 
+        @Override
         public boolean prebind(ComponentContextImpl<S> key)
         {
             return false;
         }
 
+        @Override
         public void close()
         {
         }
 
+        @Override
         public Collection<RefPair<S, T>> getRefs(AtomicInteger trackingCount)
         {
             return Collections.emptyList();
         }
 
+        @Override
         public boolean isSatisfied()
         {
             return isOptional();
         }
 
+        @Override
         public void setTracker(ServiceTracker<T, RefPair<S, T>, ExtendedServiceEvent> tRefPairServiceTracker)
         {
         }
 
+        @Override
         public void setTrackerOpened()
         {
         }
 
+        @Override
         public void setPreviousRefMap(Map<ServiceReference<T>, RefPair<S, T>> previousRefMap)
         {
         }
 
+        @Override
         public RefPair<S, T> addingService(ServiceReference<T> tServiceReference)
         {
             return null;
         }
 
+        @Override
         public void addedService(ServiceReference<T> tServiceReference, RefPair<S, T> service, int trackingCount,
             int serviceCount, ExtendedServiceEvent event)
         {
         }
 
+        @Override
         public void modifiedService(ServiceReference<T> tServiceReference, RefPair<S, T> service, int trackingCount,
             ExtendedServiceEvent event)
         {
         }
 
+        @Override
         public void removedService(ServiceReference<T> tServiceReference, RefPair<S, T> service, int trackingCount,
             ExtendedServiceEvent event)
         {
@@ -1384,6 +1441,7 @@ public class DependencyManager<S, T> imp
     /* (non-Javadoc)
      * @see org.apache.felix.scr.impl.manager.ReferenceManager#getServiceReferences()
      */
+    @Override
     public List<ServiceReference<?>> getServiceReferences()
     {
         Collection<RefPair<S, T>> bound = m_customizer.getRefs(new AtomicInteger());
@@ -1459,7 +1517,7 @@ public class DependencyManager<S, T> imp
         }
         try
         {
-            refPair.getServiceObject(key, bundleContext, m_componentManager);
+            refPair.getServiceObject(key, bundleContext);
             serviceObject = refPair.getServiceObject(key);
         }
         catch (Exception e)
@@ -1484,22 +1542,24 @@ public class DependencyManager<S, T> imp
     /* (non-Javadoc)
      * @see org.apache.felix.scr.impl.manager.ReferenceManager#getName()
      */
+    @Override
     public String getName()
     {
         return m_dependencyMetadata.getName();
     }
 
-    public ReferenceMetadata getReferenceMetadata() 
+    public ReferenceMetadata getReferenceMetadata()
     {
     	return m_dependencyMetadata;
     }
-    
+
     /**
      * Returns <code>true</code> if this dependency manager is satisfied, that
      * is if either the dependency is optional or the number of services
      * registered in the framework and available to this dependency manager is
      * not zero.
      */
+    @Override
     public boolean isSatisfied()
     {
         return m_customizer.isSatisfied();
@@ -1528,9 +1588,9 @@ public class DependencyManager<S, T> imp
 
     public static final class OpenStatus<S, T> {
         public final AtomicInteger trackingCount = new AtomicInteger();
-        public Collection<RefPair<S, T>> refs;    	
+        public Collection<RefPair<S, T>> refs;
     }
-    
+
     /**
      * initializes a dependency. This method binds all of the service
      * occurrences to the instance object
@@ -1562,8 +1622,8 @@ public class DependencyManager<S, T> imp
         openLatch.countDown();
         return (cardinalitySatisfied(serviceCount) ? status : null);
     }
-    
-    boolean bind(final ComponentContextImpl<S> componentContext, final OpenStatus<S, T> status) 
+
+    boolean bind(final ComponentContextImpl<S> componentContext, final OpenStatus<S, T> status)
     {
         if (!invokeInitMethod(componentContext))
         {
@@ -1743,7 +1803,7 @@ public class DependencyManager<S, T> imp
 
         }
         MethodResult result = bindMethod.invoke(componentContext.getImplementationObject(false),
-            new BindParameters(componentContext, refPair), MethodResult.VOID, m_componentManager);
+            new BindParameters(componentContext, refPair), MethodResult.VOID);
         if (result == null)
         {
             return false;
@@ -1789,8 +1849,7 @@ public class DependencyManager<S, T> imp
 
             }
             final MethodResult methodResult = m_bindMethods.getUpdated().invoke(
-                componentContext.getImplementationObject(false), new BindParameters(componentContext, refPair), MethodResult.VOID,
-                m_componentManager);
+                componentContext.getImplementationObject(false), new BindParameters(componentContext, refPair), MethodResult.VOID);
             if (methodResult != null)
             {
                 m_componentManager.setServiceProperties(methodResult, trackingCount);
@@ -1858,8 +1917,7 @@ public class DependencyManager<S, T> imp
 
             }
             MethodResult methodResult = m_bindMethods.getUnbind().invoke(
-                componentContext.getImplementationObject(false), new BindParameters(componentContext, refPair), MethodResult.VOID,
-                m_componentManager);
+                componentContext.getImplementationObject(false), new BindParameters(componentContext, refPair), MethodResult.VOID);
             if (methodResult != null)
             {
                 m_componentManager.setServiceProperties(methodResult, trackingCount);
@@ -2205,6 +2263,7 @@ public class DependencyManager<S, T> imp
     /* (non-Javadoc)
      * @see org.apache.felix.scr.impl.manager.ReferenceManager#getTarget()
      */
+    @Override
     public String getTarget()
     {
         return m_target;
@@ -2221,7 +2280,7 @@ public class DependencyManager<S, T> imp
         BundleContext bundleContext = m_componentManager.getBundleContext();
         if (bundleContext != null)
         {
-            return bindMethod.getServiceObject(new BindParameters(key, refPair), bundleContext, m_componentManager);
+            return bindMethod.getServiceObject(new BindParameters(key, refPair), bundleContext);
         }
         else
         {

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java Thu Feb  2 09:33:47 2017
@@ -23,7 +23,6 @@ package org.apache.felix.scr.impl.manage
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
@@ -74,14 +73,13 @@ public class MultiplePrototypeRefPair<S,
     }
 
     @Override
-    public boolean getServiceObject(ComponentContextImpl<S> key, BundleContext context,
-        SimpleLogger logger)
+    public boolean getServiceObject(ComponentContextImpl<S> key, BundleContext context)
     {
     	final T service = key.getComponentServiceObjectsHelper().getPrototypeRefInstance(this.getRef(), serviceObjects);
         if ( service == null )
         {
             setFailed();
-            logger.log(
+            key.getLogger().log(
                  LogService.LOG_WARNING,
                  "Could not get service from serviceobjects for ref {0}", new Object[] {getRef()}, null );
             return false;

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RefPair.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RefPair.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RefPair.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/RefPair.java Thu Feb  2 09:33:47 2017
@@ -20,7 +20,6 @@
 
 package org.apache.felix.scr.impl.manager;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
@@ -50,7 +49,7 @@ public abstract class RefPair<S, T>
         return null;
     }
 
-    public abstract boolean getServiceObject( ComponentContextImpl<S> key, BundleContext context, SimpleLogger logger );
+    public abstract boolean getServiceObject( ComponentContextImpl<S> key, BundleContext context );
 
     public abstract T getServiceObject(ComponentContextImpl<S> key);
 

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java Thu Feb  2 09:33:47 2017
@@ -232,7 +232,7 @@ public class ServiceFactoryComponentMana
         {
             S instance = componentContext.getImplementationObject(true);
             result = modifiedMethod.invoke( instance,
-                    componentContext, -1, MethodResult.VOID, this );
+                    componentContext, -1, MethodResult.VOID );
 
         }
         return result;

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java Thu Feb  2 09:33:47 2017
@@ -272,8 +272,7 @@ public class SingleComponentManager<S> e
 
                 implementationObject = getComponentMethods().getConstructor().newInstance(implementationObjectClass,
                         componentContext,
-                        paramMap,
-                        this);
+                        paramMap);
 
             }
             catch ( Throwable t )
@@ -328,7 +327,7 @@ public class SingleComponentManager<S> e
         // 5. Call the activate method, if present
         final MethodResult failedResult = new MethodResult(true, new HashMap<String, Object>());
         final MethodResult result = getComponentMethods().getActivateMethod().invoke( implementationObject,
-                componentContext, 1, failedResult, this );
+                componentContext, 1, failedResult );
         if ( result == failedResult )
         {
             this.setFailureReason((Throwable)failedResult.getResult().get("exception"));
@@ -378,7 +377,7 @@ public class SingleComponentManager<S> e
             // method throws an exception, SCR must log an error message containing the
             // exception with the Log Service and continue) has already been logged
             final MethodResult result = getComponentMethods().getDeactivateMethod().invoke( implementationObject,
-                    componentContext, reason, null, this );
+                    componentContext, reason, null );
             if ( result != null )
             {
                 setServiceProperties( result, null );
@@ -806,7 +805,7 @@ public class SingleComponentManager<S> e
         if ( getInstance() != null )
         {
             return modifiedMethod.invoke( getInstance(), m_componentContext, -1,
-                    MethodResult.VOID, this );
+                    MethodResult.VOID );
         }
         return MethodResult.VOID;
     }

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java?rev=1781360&r1=1781359&r2=1781360&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java Thu Feb  2 09:33:47 2017
@@ -20,7 +20,6 @@
 
 package org.apache.felix.scr.impl.manager;
 
-import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
@@ -52,14 +51,13 @@ public class SinglePrototypeRefPair<S, T
     }
 
     @Override
-    public boolean getServiceObject(ComponentContextImpl<S> key, BundleContext context,
-        SimpleLogger logger)
+    public boolean getServiceObject(ComponentContextImpl<S> key, BundleContext context)
     {
     	final T service = key.getComponentServiceObjectsHelper().getPrototypeRefInstance(this.getRef(), serviceObjects);
         if ( service == null )
         {
             setFailed();
-            logger.log(
+            key.getLogger().log(
                  LogService.LOG_WARNING,
                  "Could not get service from serviceobjects for ref {0}", new Object[] {getRef()}, null );
             return false;