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 2014/12/23 12:41:44 UTC

svn commit: r1647554 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: event/NotificationManager.java portable/events/generics/GProcessInjectionPoint.java portable/events/generics/TwoParametersGenericBeanEvent.java

Author: rmannibucau
Date: Tue Dec 23 11:41:44 2014
New Revision: 1647554

URL: http://svn.apache.org/r1647554
Log:
when a container event has multiple params we should check them all, doing it for GProcessInjectionPoint, we can desire to do it in a more generic fashion but didnt want to force all events to create an array of Type

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/TwoParametersGenericBeanEvent.java
      - copied, changed from r1647047, openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GenericBeanEvent.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessInjectionPoint.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1647554&r1=1647553&r2=1647554&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java Tue Dec 23 11:41:44 2014
@@ -68,6 +68,7 @@ import org.apache.webbeans.logger.WebBea
 import org.apache.webbeans.portable.events.ProcessSessionBeanImpl;
 import org.apache.webbeans.portable.events.generics.GenericBeanEvent;
 import org.apache.webbeans.portable.events.generics.GenericProducerObserverEvent;
+import org.apache.webbeans.portable.events.generics.TwoParametersGenericBeanEvent;
 import org.apache.webbeans.spi.TransactionService;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
@@ -309,7 +310,7 @@ public final class NotificationManager
         Set<Type> keySet = observers.keySet();
         for (Type type : keySet)
         {
-            Class<?> beanClass = null;
+            Class<?> beanClass;
             Class<?> observerClass = ClassUtil.getClazz(type);
             
             if(observerClass != null)
@@ -326,7 +327,12 @@ public final class NotificationManager
                             
                             if(ClassUtil.isParametrizedType(type))
                             {
-                                addToMatchingWithParametrizedForBeans(type, beanClass, matching);
+                                Type secondParam = null;
+                                if (TwoParametersGenericBeanEvent.class.isInstance(event))
+                                {
+                                    secondParam = TwoParametersGenericBeanEvent.class.cast(event).getInjectionType();
+                                }
+                                addToMatchingWithParametrizedForBeans(type, matching, beanClass, secondParam);
                             }
                             else
                             {
@@ -362,7 +368,7 @@ public final class NotificationManager
                         {
                             if(ClassUtil.isParametrizedType(type))
                             {
-                                addToMatchingWithParametrizedForBeans(type, beanClass, matching);
+                                addToMatchingWithParametrizedForBeans(type, matching, beanClass, null);
                             }
                             else
                             {
@@ -395,7 +401,7 @@ public final class NotificationManager
      * @return true if fired event class is assignable with 
      * given observer type argument.
      */
-    private boolean checkEventTypeParameterForExtensions(Class<?> beanClass, Type observerTypeActualArg)
+    private boolean checkEventTypeParameterForExtensions(Type beanClass, Type observerTypeActualArg)
     {
         if(ClassUtil.isTypeVariable(observerTypeActualArg))
         {
@@ -406,7 +412,7 @@ public final class NotificationManager
             {
                 Class<?> clazzTvBound = (Class<?>)tvBound;
                 
-                if(clazzTvBound.isAssignableFrom(beanClass))
+                if(Class.class.isInstance(beanClass) && clazzTvBound.isAssignableFrom(Class.class.cast(beanClass)))
                 {
                     return true;
                 }                    
@@ -420,7 +426,7 @@ public final class NotificationManager
         else if(observerTypeActualArg instanceof Class)
         {
             Class<?> observerClass = (Class<?>)observerTypeActualArg;
-            if(observerClass.isAssignableFrom(beanClass))
+            if(Class.class.isInstance(beanClass) && observerClass.isAssignableFrom(Class.class.cast(beanClass)))
             {
                 return true;
             }
@@ -439,7 +445,8 @@ public final class NotificationManager
         }        
     }
     
-    private <T> void addToMatchingWithParametrizedForBeans(Type type, Class<?> beanClass, Set<ObserverMethod<? super T>> matching)
+    private <T> void addToMatchingWithParametrizedForBeans(Type type, Set<ObserverMethod<? super T>> matching,
+                                                           Class<?> beanClass, Type secondParam)
     {
         ParameterizedType pt = (ParameterizedType)type;
         Type[] actualArgs = pt.getActualTypeArguments();
@@ -454,7 +461,9 @@ public final class NotificationManager
         }
         else
         {
-            if(checkEventTypeParameterForExtensions(beanClass, actualArgs[0]))
+            if(checkEventTypeParameterForExtensions(beanClass, actualArgs[0])
+                    && (secondParam == null || actualArgs.length == 1
+                            || checkEventTypeParameterForExtensions(secondParam, actualArgs[1])))
             {
                 addToMatching(type, matching);   
             }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessInjectionPoint.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessInjectionPoint.java?rev=1647554&r1=1647553&r2=1647554&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessInjectionPoint.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessInjectionPoint.java Tue Dec 23 11:41:44 2014
@@ -22,9 +22,10 @@ import org.apache.webbeans.portable.even
 
 import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.InjectionPoint;
+import java.lang.reflect.Type;
 
 
-public class GProcessInjectionPoint extends ProcessInjectionPointImpl implements GenericBeanEvent
+public class GProcessInjectionPoint extends ProcessInjectionPointImpl implements TwoParametersGenericBeanEvent
 {
 
     public GProcessInjectionPoint(InjectionPoint injectionPoint)
@@ -49,4 +50,14 @@ public class GProcessInjectionPoint exte
 
         return null;
     }
+
+    @Override
+    public Type getInjectionType()
+    {
+        if (getInjectionPoint() != null)
+        {
+            return getInjectionPoint().getType();
+        }
+        return null;
+    }
 }

Copied: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/TwoParametersGenericBeanEvent.java (from r1647047, openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GenericBeanEvent.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/TwoParametersGenericBeanEvent.java?p2=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/TwoParametersGenericBeanEvent.java&p1=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GenericBeanEvent.java&r1=1647047&r2=1647554&rev=1647554&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GenericBeanEvent.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/TwoParametersGenericBeanEvent.java Tue Dec 23 11:41:44 2014
@@ -18,15 +18,9 @@
  */
 package org.apache.webbeans.portable.events.generics;
 
-public interface GenericBeanEvent
-{
+import java.lang.reflect.Type;
 
-    /**
-     * If this is a Foo<X> event and we are considering it as a Bar<Y> event,
-     * returns the generic type of Foo as a Bar.  Normally this is X, but in at least one case
-     * (ProcessSessionBean) the generic type is different.
-     * @param eventClass the class of event we are treating this event as
-     * @return the generic type parameter of this event considered as an "eventClass"
-     */
-    public Class<?> getBeanClassFor(Class<?> eventClass);
+public interface TwoParametersGenericBeanEvent extends GenericBeanEvent
+{
+    Type getInjectionType();
 }