You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2013/04/16 09:44:41 UTC

svn commit: r1468322 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java

Author: rmannibucau
Date: Tue Apr 16 07:44:40 2013
New Revision: 1468322

URL: http://svn.apache.org/r1468322
Log:
OWB-840 handle delegate creation through getInjectableReference

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1468322&r1=1468321&r2=1468322&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java Tue Apr 16 07:44:40 2013
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.decorator.Delegate;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Disposes;
@@ -204,7 +205,7 @@ public class InjectionTargetImpl<T> exte
             }
 
             T delegate = instance;
-            if (interceptorInfo.getDecorators() != null)
+            if (interceptorInfo.getDecorators() != null && !isDelegateInjection(creationalContext))
             {
                 List<Decorator<?>> decorators = interceptorInfo.getDecorators();
                 Map<Decorator<?>, Object> instances = new HashMap<Decorator<?>, Object>();
@@ -226,6 +227,26 @@ public class InjectionTargetImpl<T> exte
 
         return instance;
     }
+
+    protected boolean isDelegateInjection(final CreationalContext<?> cc)
+    {
+        if (CreationalContextImpl.class.isInstance(cc))
+        {
+            final InjectionPoint ip = CreationalContextImpl.class.cast(cc).getInjectionPoint();
+            if (ip == null)
+            {
+                return false;
+            }
+
+            final Member member = ip.getMember();
+            if (member != null
+                    && Field.class.isInstance(member) && Field.class.cast(member).getAnnotation(Delegate.class) != null)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
     
     protected T newInstance(CreationalContextImpl<T> creationalContext)
     {