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();
}