protected List getMethodArguments()

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