You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2014/04/23 08:30:12 UTC

svn commit: r1589348 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: event/NotificationManager.java util/GenericsUtil.java

Author: arne
Date: Wed Apr 23 06:30:11 2014
New Revision: 1589348

URL: http://svn.apache.org/r1589348
Log:
OWB-946: Fixed handling of parameterized injection point and raw bean/event type (org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest.testEventObjectTypeUsed) 

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.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=1589348&r1=1589347&r2=1589348&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 Wed Apr 23 06:30:11 2014
@@ -152,21 +152,24 @@ public final class NotificationManager
         
         Set<ObserverMethod<? super T>> matching = new HashSet<ObserverMethod<? super T>>();
 
-        Type eventType = GenericsUtil.resolveType(declaredEventType, eventClass); 
+        Set<Type> eventTypes = GenericsUtil.getTypeClosure(declaredEventType, eventClass); 
 
         Set<Type> observedTypes = observers.keySet();
 
         for (Type observedType : observedTypes)
         {
-            if (GenericsUtil.isAssignableFrom(false, observedType, eventType))
+            for (Type eventType : eventTypes)
             {
-                Set<ObserverMethod<?>> observerMethods = observers.get(observedType);
-
-                for (ObserverMethod<?> observerMethod : observerMethods)
+                if (GenericsUtil.isAssignableFrom(false, observedType, eventType))
                 {
-                    matching.add((ObserverMethod<T>) observerMethod);
+                    Set<ObserverMethod<?>> observerMethods = observers.get(observedType);
+
+                    for (ObserverMethod<?> observerMethod : observerMethods)
+                    {
+                        matching.add((ObserverMethod<T>) observerMethod);
+                    }
+                    break;
                 }
-                break;
             }
         }
         return matching;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java?rev=1589348&r1=1589347&r2=1589348&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java Wed Apr 23 06:30:11 2014
@@ -224,13 +224,33 @@ public final class GenericsUtil
         }
         else
         {
-            throw new IllegalArgumentException("Unsupported type " + injectionPointType.getClass());
+            throw new IllegalArgumentException("Unsupported type " + beanType.getClass());
         }
     }
 
     private static boolean isAssignableFrom(boolean isDelegate, ParameterizedType injectionPointType, Class<?> beanType)
     {
-        return isAssignableFrom(isDelegate, injectionPointType.getRawType(), beanType);
+        Class<?> rawInjectionPointType = getRawType(injectionPointType);
+        if (rawInjectionPointType.equals(beanType))
+        {
+            return true;
+        }
+        if (!rawInjectionPointType.isAssignableFrom(beanType))
+        {
+            return false;
+        }
+        if (beanType.getSuperclass() != null && isAssignableFrom(isDelegate, injectionPointType, beanType.getGenericSuperclass()))
+        {
+            return true;
+        }
+        for (Type genericInterface: beanType.getGenericInterfaces())
+        {
+            if (isAssignableFrom(isDelegate, injectionPointType, genericInterface))
+            {
+                return true;
+            }
+        }
+        return false;
     }
 
     private static boolean isAssignableFrom(boolean isDelegate, ParameterizedType injectionPointType, TypeVariable<?> beanType)