[DS][RFC-212] Various issues with field references
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1690372 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java
index d909be9..952e6c6 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java
@@ -43,8 +43,6 @@
{
private final String m_referenceClassName;
- private final ReferenceMetadata.ReferenceScope m_referenceScope;
-
private enum ParamType {
serviceReference,
serviceObjects,
@@ -57,11 +55,10 @@
public BindMethod( final String methodName,
- final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties, ReferenceScope referenceScope )
+ final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties )
{
super( methodName, componentClass, dsVersion, configurableServiceProperties );
m_referenceClassName = referenceClassName;
- m_referenceScope = referenceScope;
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethods.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethods.java
index 91adf99..c0a04e7 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethods.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethods.java
@@ -36,24 +36,23 @@
public BindMethods( ReferenceMetadata m_dependencyMetadata, Class<?> instanceClass,
final DSVersion dsVersion, final boolean configurableServiceProperties )
{
- ReferenceMetadata.ReferenceScope referenceScope = m_dependencyMetadata.getScope();
m_bind = new org.apache.felix.scr.impl.helper.BindMethod(
m_dependencyMetadata.getBind(),
instanceClass,
m_dependencyMetadata.getInterface(),
- dsVersion, configurableServiceProperties, referenceScope
+ dsVersion, configurableServiceProperties
);
m_updated = new org.apache.felix.scr.impl.helper.UpdatedMethod(
m_dependencyMetadata.getUpdated(),
instanceClass,
m_dependencyMetadata.getInterface(),
- dsVersion, configurableServiceProperties, referenceScope
+ dsVersion, configurableServiceProperties
);
m_unbind = new org.apache.felix.scr.impl.helper.UnbindMethod(
m_dependencyMetadata.getUnbind(),
instanceClass,
m_dependencyMetadata.getInterface(),
- dsVersion, configurableServiceProperties, referenceScope
+ dsVersion, configurableServiceProperties
);
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
index 0dcc431..1b55ff0 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
@@ -531,7 +531,8 @@
if ( !this.metadata.isMultiple() )
{
// unary references
- // unbind needs only be done, if reference is dynamic and optional
+
+ // unbind needs only be done, if reference is dynamic and optional
if ( mType == METHOD_TYPE.UNBIND )
{
if ( this.metadata.isOptional() && !this.metadata.isStatic() )
@@ -544,18 +545,16 @@
}
this.boundValues.remove(refPair);
}
- // updated needs only be done, if reference is dynamic and optional
+ // updated needs only be done, if reference is dynamic
// and the value type is map or tuple
else if ( mType == METHOD_TYPE.UPDATED )
{
- if ( this.metadata.isOptional() && !this.metadata.isStatic() )
+ if ( !this.metadata.isStatic()
+ && ( this.valueType == ParamType.map || this.valueType == ParamType.tuple ) )
{
- if ( this.valueType == ParamType.map || this.valueType == ParamType.tuple )
- {
- final Object obj = getValue(key, refPair);
- this.setFieldValue(componentInstance, obj);
- this.boundValues.put(refPair, obj);
- }
+ final Object obj = getValue(key, refPair);
+ this.setFieldValue(componentInstance, obj);
+ this.boundValues.put(refPair, obj);
}
}
// bind needs always be done
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/UnbindMethod.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/UnbindMethod.java
index 7d6b73b..693d89c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/UnbindMethod.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/UnbindMethod.java
@@ -30,9 +30,9 @@
{
public UnbindMethod( final String methodName,
- final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties, ReferenceMetadata.ReferenceScope referenceScope )
+ final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties )
{
- super( methodName, componentClass, referenceClassName, dsVersion, configurableServiceProperties, referenceScope );
+ super( methodName, componentClass, referenceClassName, dsVersion, configurableServiceProperties );
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/UpdatedMethod.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/UpdatedMethod.java
index 61dcd53..6bf0ff7 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/UpdatedMethod.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/UpdatedMethod.java
@@ -30,9 +30,9 @@
{
public UpdatedMethod( final String methodName,
- final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties, ReferenceMetadata.ReferenceScope referenceScope )
+ final Class<?> componentClass, final String referenceClassName, final DSVersion dsVersion, final boolean configurableServiceProperties )
{
- super( methodName, componentClass, referenceClassName, dsVersion, configurableServiceProperties, referenceScope );
+ super( methodName, componentClass, referenceClassName, dsVersion, configurableServiceProperties );
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index 0a0105f..724a122 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -1621,7 +1621,7 @@
*/
void invokeUpdatedMethod( ComponentContextImpl<S> componentContext, final RefPair<S, T> refPair, int trackingCount, EdgeInfo info )
{
- if ( m_dependencyMetadata.getUpdated() == null )
+ if ( m_dependencyMetadata.getUpdated() == null && m_dependencyMetadata.getField() == null )
{
return;
}