Skip to content

Commit

Permalink
Give the injection points for observer methods the correct bean
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Oct 4, 2010
1 parent b1ec267 commit 1217d6a
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 14 deletions.
Expand Up @@ -496,7 +496,7 @@ void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager manager)
Set<ObserverMethodInfo<?>> observers = defaultObserverMethodsByBean.get(qual);
for (ObserverMethodInfo<?> i : observers)
{
DefaultObserverMethod<?, ?> obs = DefaultObserverMethod.of(i.getDelegate(), i.getAnnotatedMethod(), qualifiers, i.getObserverParameterQualifier(), manager);
DefaultObserverMethod<?, ?> obs = DefaultObserverMethod.of(i.getDelegate(), i.getAnnotatedMethod(), qualifiers, i.getObserverParameterQualifier(), db, manager);
event.addObserverMethod(obs);
}
}
Expand Down
Expand Up @@ -2,7 +2,6 @@

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.Set;

import javax.enterprise.context.spi.CreationalContext;
Expand All @@ -11,7 +10,6 @@
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.ObserverMethod;

import org.jboss.weld.extensions.bean.ForwardingObserverMethod;
Expand All @@ -30,15 +28,15 @@ class DefaultObserverMethod<T, X> extends ForwardingObserverMethod<T>

private static final Annotation[] EMPTY_QUALIFIER_ARRAY = {};

static <T, X> DefaultObserverMethod<T, X> of(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Set<Annotation> declaringBeanQualifiers, Set<Annotation> qualifiers, BeanManager beanManager)
static <T, X> DefaultObserverMethod<T, X> of(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Set<Annotation> declaringBeanQualifiers, Set<Annotation> qualifiers, Bean<?> defaultBean, BeanManager beanManager)
{
return new DefaultObserverMethod<T, X>(originalObserverMethod, observerMethod, declaringBeanQualifiers, qualifiers, beanManager);
return new DefaultObserverMethod<T, X>(originalObserverMethod, observerMethod, declaringBeanQualifiers, qualifiers, defaultBean, beanManager);
}

DefaultObserverMethod(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Set<Annotation> declaringBeanQualifiers, Set<Annotation> qualifiers, BeanManager beanManager)
DefaultObserverMethod(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Set<Annotation> declaringBeanQualifiers, Set<Annotation> qualifiers, Bean<?> defaultBean, BeanManager beanManager)
{
this.originalObserverMethod = originalObserverMethod;
this.observerMethod = new InjectableMethod<X>(observerMethod, Collections.<InjectionPoint>emptyList(), beanManager);
this.observerMethod = new InjectableMethod<X>(observerMethod, defaultBean, beanManager);
this.beanManager = beanManager;
this.declaringBeanQualifiers = declaringBeanQualifiers.toArray(EMPTY_QUALIFIER_ARRAY);
this.declaringBeanType = originalObserverMethod.getBeanClass();
Expand Down
Expand Up @@ -540,7 +540,7 @@ void createGenericBeans(@Observes AfterBeanDiscovery event, BeanManager beanMana
{
for (ObserverMethodHolder<?, ?> holder : genericBeanObserverMethods.get(genericConfigurationType))
{
event.addObserverMethod(createGenericObserverMethod(holder.getObserverMethod(), genericConfiguration, holder.getMethod(), beanManager));
event.addObserverMethod(createGenericObserverMethod(holder.getObserverMethod(), genericConfiguration, holder.getMethod(), null, beanManager));
}

}
Expand Down Expand Up @@ -658,11 +658,11 @@ public Set<Annotation> getQualifiers(BeanManager beanManager, Annotation generic
return Beans.getQualifiers(beanManager, genericProducers.get(genericConfiguration).getMember().getAnnotations(), annotations);
}

private <X, T> ObserverMethod<T> createGenericObserverMethod(ObserverMethod<T> originalObserverMethod, Annotation genericConfiguration, AnnotatedMethod<X> method, BeanManager beanManager)
private <X, T> ObserverMethod<T> createGenericObserverMethod(ObserverMethod<T> originalObserverMethod, Annotation genericConfiguration, AnnotatedMethod<X> method, Bean<?> genericBean, BeanManager beanManager)
{
Set<Annotation> qualifiers = getQualifiers(beanManager, genericConfiguration, originalObserverMethod.getObservedQualifiers());
Set<Annotation> declaringBeanQualifiers = getQualifiers(beanManager, genericConfiguration, Collections.EMPTY_SET);
return new GenericObserverMethod<T, X>(originalObserverMethod, method, genericConfiguration, qualifiers, declaringBeanQualifiers, beanManager);
return new GenericObserverMethod<T, X>(originalObserverMethod, method, genericConfiguration, qualifiers, declaringBeanQualifiers, genericBean, beanManager);
}

private <X, T> Bean<T> createGenericProducerField(Bean<T> originalBean, Annotation genericConfiguration, AnnotatedField<X> field, BeanManager beanManager, Class<? extends Annotation> scopeOverride)
Expand Down
Expand Up @@ -29,10 +29,10 @@ class GenericObserverMethod<T, X> extends ForwardingObserverMethod<T>
private final Set<Annotation> qualifiers;
private static final Annotation[] EMPTY_ANNOTATION_ARRAY = {};

GenericObserverMethod(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Annotation declaringBeanQualifier, Set<Annotation> qualifiers, Set<Annotation> declaringBeanQualifiers, BeanManager beanManager)
GenericObserverMethod(ObserverMethod<T> originalObserverMethod, AnnotatedMethod<X> observerMethod, Annotation declaringBeanQualifier, Set<Annotation> qualifiers, Set<Annotation> declaringBeanQualifiers, Bean<?> genericBean, BeanManager beanManager)
{
this.originalObserverMethod = originalObserverMethod;
this.observerMethod = new InjectableMethod<X>(observerMethod, Collections.<InjectionPoint>emptyList(), beanManager);
this.observerMethod = new InjectableMethod<X>(observerMethod, genericBean, beanManager);
this.beanManager = beanManager;
this.declaringBeanQualifiers = declaringBeanQualifiers.toArray(EMPTY_ANNOTATION_ARRAY);
this.declaringBeanType = originalObserverMethod.getBeanClass();
Expand Down
Expand Up @@ -491,11 +491,11 @@ public static <T> T invokeMethod(Method method, Class<T> expectedReturnType, Obj
}
catch (IllegalArgumentException ex)
{
throw new IllegalArgumentException(buildInvokeMethodErrorMessage(method, instance, args), ex.getCause());
throw new IllegalArgumentException(buildInvokeMethodErrorMessage(method, instance, args), ex);
}
catch (InvocationTargetException ex)
{
throw new RuntimeException(buildInvokeMethodErrorMessage(method, instance, args), ex);
throw new RuntimeException(buildInvokeMethodErrorMessage(method, instance, args), ex.getCause());
}
catch (NullPointerException ex)
{
Expand Down

0 comments on commit 1217d6a

Please sign in to comment.