public T doInjection()

in webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java [86:166]


    public T doInjection()
    {
        Object owner = ownerInstance;
        if (owner instanceof OwbNormalScopeProxy)
        {
            owner = NormalScopeProxyFactory.unwrapInstance(owner);
        }

        List<Object> list = new ArrayList<>();
                
        
        for(int i=0;i<injectionPoints.size();i++)
        {
            for(InjectionPoint point : injectionPoints)
            {                
                AnnotatedParameter<?> parameter = (AnnotatedParameter<?>)point.getAnnotated();
                if (parameter.getPosition() == i)
                {
                    if (point.isDelegate())
                    {
                        list.add(creationalContext.getDelegate());
                        break;
                    }

                    boolean injectionPoint = false;
                    if(getBean() instanceof ProducerMethodBean)
                    {
                        if(parameter.getBaseType().equals(InjectionPoint.class))
                        {
                            BeanManager manager = getWebBeansContext().getBeanManagerImpl();
                            Object reference = manager.getInjectableReference(point, creationalContext);
                            list.add(reference);
                            injectionPoint = true;
                        }
                    }
                    
                    if(!injectionPoint)
                    {
                        if(isDisposable() && parameter.getAnnotation(Disposes.class) != null)
                        {
                            list.add(producerMethodInstance);
                        }
                        else
                        {
                            Object instance = inject(point);
                            InjectionResolver injectionResolver = getWebBeansContext().getBeanManagerImpl().getInjectionResolver();

                            Bean<?> injectedBean = injectionResolver.getInjectionPointBean(point);
                            if(injectedBean.getScope() == Dependent.class)
                            {
                                dependentParameters.put(injectedBean, instance);
                            }

                            list.add(instance);    
                        }                        
                    }
                                        
                    break;
                }
            }
        }        
        
        try
        {
            if (!method.isAccessible())
            {
                getWebBeansContext().getSecurityService().doPrivilegedSetAccessible(method, true);
            }

            return (T) method.invoke(owner, list.toArray(new Object[list.size()]));

        }
        catch (Exception e)
        {
            throw new WebBeansException(e);
        }
        finally
        {
            transientCreationalContext.release();
        }
    }