You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2014/07/02 21:17:22 UTC
svn commit: r1607453 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/creation/ObserverMethodsBuilder.java
event/ContainerEventObserverMethodImpl.java event/NotificationManager.java
event/ObserverMethodImpl.java
Author: struberg
Date: Wed Jul 2 19:17:21 2014
New Revision: 1607453
URL: http://svn.apache.org/r1607453
Log:
fix observer method qualifier and injection point detection
The code was basically ok, but it didn't work with
custom AnnotatedType which
a.) do not properly point to their 'parent' -> add the annotatedMethod as parameter
b.) create new wrapper objects each time they get called. This breaks == comparison
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java?rev=1607453&r1=1607452&r2=1607453&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java Wed Jul 2 19:17:21 2014
@@ -91,7 +91,8 @@ public class ObserverMethodsBuilder<T, I
checkObserverMethodConditions(bean, observesParameter);
//Looking for ObserverMethod
- ObserverMethod<?> definedObserver = webBeansContext.getBeanManagerImpl().getNotificationManager().getObservableMethodForAnnotatedMethod(observesParameter, bean);
+ ObserverMethod<?> definedObserver = webBeansContext.getBeanManagerImpl().getNotificationManager().
+ getObservableMethodForAnnotatedMethod(annotatedMethod, observesParameter, bean);
definedObservers.add(definedObserver);
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java?rev=1607453&r1=1607452&r2=1607453&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java Wed Jul 2 19:17:21 2014
@@ -21,14 +21,16 @@ package org.apache.webbeans.event;
import org.apache.webbeans.component.AbstractOwbBean;
import org.apache.webbeans.portable.events.discovery.ExtensionAware;
+import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import java.lang.reflect.InvocationTargetException;
public class ContainerEventObserverMethodImpl<T> extends ObserverMethodImpl<T>
{
- public ContainerEventObserverMethodImpl(final AbstractOwbBean<?> bean, final AnnotatedParameter<T> annotatedObservesParameter)
+ public ContainerEventObserverMethodImpl(final AbstractOwbBean<?> bean, final AnnotatedMethod<T> annotatedObserverMethod,
+ final AnnotatedParameter<T> annotatedObservesParameter)
{
- super(bean, annotatedObservesParameter);
+ super(bean, annotatedObserverMethod, annotatedObservesParameter);
}
@Override
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=1607453&r1=1607452&r2=1607453&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 Jul 2 19:17:21 2014
@@ -496,14 +496,14 @@ public final class NotificationManager
* @param bean bean instance
* @return ObserverMethod
*/
- public <T> ObserverMethod<?> getObservableMethodForAnnotatedMethod(AnnotatedParameter<?> annotatedParameter, AbstractOwbBean<T> bean)
+ public <T> ObserverMethod<?> getObservableMethodForAnnotatedMethod(AnnotatedMethod<?> annotatedMethod, AnnotatedParameter<?> annotatedParameter, AbstractOwbBean<T> bean)
{
Asserts.assertNotNull(annotatedParameter, "annotatedParameter can not be null");
//Observer creation from annotated method
ObserverMethodImpl<T> observer = isContainerEvent(annotatedParameter)?
- new ContainerEventObserverMethodImpl(bean, annotatedParameter) :
- new ObserverMethodImpl(bean, annotatedParameter);
+ new ContainerEventObserverMethodImpl(bean, annotatedMethod, annotatedParameter) :
+ new ObserverMethodImpl(bean, annotatedMethod, annotatedParameter);
//Adds this observer
addObserver(observer, annotatedParameter.getBaseType());
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1607453&r1=1607452&r2=1607453&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Wed Jul 2 19:17:21 2014
@@ -125,15 +125,12 @@ public class ObserverMethodImpl<T> imple
* used if the qualifiers and event type are already known, e.g. from the XML.
* @param bean
* @param annotatedObserverMethod
- * @param ifExist
- * @param qualifiers
- * @param observedEventType
*/
- public ObserverMethodImpl(AbstractOwbBean<?> bean, AnnotatedParameter<T> annotatedObservesParameter)
+ public ObserverMethodImpl(AbstractOwbBean<?> bean, AnnotatedMethod<T> annotatedObserverMethod, AnnotatedParameter<T> annotatedObservesParameter)
{
this.bean = bean;
this.annotatedObservesParameter = annotatedObservesParameter;
- annotatedObserverMethod = (AnnotatedMethod<T>)annotatedObservesParameter.getDeclaringCallable();
+ this.annotatedObserverMethod = annotatedObserverMethod;
observedEventType = annotatedObservesParameter.getBaseType();
Observes observes = annotatedObservesParameter.getAnnotation(Observes.class);
ifExist = observes.notifyObserver() == Reception.IF_EXISTS;
@@ -160,7 +157,7 @@ public class ObserverMethodImpl<T> imple
injectionPoints = new LinkedHashSet<InjectionPoint>();
for (AnnotatedParameter<?> parameter: annotatedObserverMethod.getParameters())
{
- if (parameter != annotatedObservesParameter)
+ if (!parameter.isAnnotationPresent(Observes.class))
{
Collection<Annotation> qualifierAnnots = getWebBeansContext().getAnnotationManager().getQualifierAnnotations(parameter.getAnnotations());