in webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java [418:481]
protected List<ObserverParams> getMethodArguments(Object event, EventMetadata metadata)
{
if (injectionPoints.isEmpty() && annotatedObservesParameter.getPosition() == 0)
{
return null; // special handling
}
List<ObserverParams> list = new ArrayList<>();
if (annotatedObservesParameter.getPosition() == 0)
{
ObserverParams param = new ObserverParams();
param.instance = event;
list.add(param);
}
WebBeansContext webBeansContext = ownerBean.getWebBeansContext();
BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
for (InjectionPoint injectionPoint: injectionPoints)
{
ObserverParams param = new ObserverParams();
param.isBean = true;
if (injectionPoint.getType() == BeanManager.class &&
injectionPoint.getQualifiers().contains(DefaultLiteral.INSTANCE))
{
param.instance = webBeansContext.getInjectableBeanManager();
param.isBean = false; // no need to release
}
else
{
Bean<Object> injectedBean = (Bean<Object>) manager.getInjectionResolver().getInjectionPointBean(injectionPoint);
CreationalContextImpl<Object> creational = manager.createCreationalContext(injectedBean);
creational.putInjectionPoint(metadata.getInjectionPoint());
creational.putInjectionPoint(injectionPoint);
creational.putEventMetadata(metadata);
Object instance;
try
{
instance = manager.getReference(injectedBean, null, creational);
}
finally
{
creational.removeEventMetadata();
creational.removeInjectionPoint();
creational.removeInjectionPoint();
}
param.creational = creational;
param.instance = instance;
param.bean = injectedBean;
}
list.add(param);
if (list.size() == annotatedObservesParameter.getPosition())
{
param = new ObserverParams();
param.instance = event;
list.add(param);
}
}
return list;
}