public List resolveInstances()

in core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/ServiceLoaderResolver.java [44:99]


    public <K, T> List<T> resolveInstances(ConfiguredValueDescriptor<K, T> descriptor)
    {
        List<T> result = new ArrayList<T>();
        final Class targetType = descriptor.getTargetType();
        if(Modifier.isAbstract(targetType.getModifiers()) || Modifier.isInterface(targetType.getModifiers()))
        {
            @SuppressWarnings({"unchecked"})
            List<T> services = ServiceProvider.loadServices(targetType, new EditableServiceProviderContext<T>()
            {
                private ServiceProviderContext serviceProviderContext =
                        ServiceProvider.createServiceProviderContext(targetType);

                public T postConstruct(T instance)
                {
                    if(serviceProviderContext instanceof EditableServiceProviderContext)
                    {
                        return ((EditableServiceProviderContext<T>)serviceProviderContext)
                                .postConstruct(instance);
                    }
                    return instance;
                }

                public boolean filterService(Class serviceClass)
                {
                    if(serviceProviderContext instanceof EditableServiceProviderContext &&
                            !(serviceProviderContext instanceof DefaultServiceProviderContext))
                    {
                        return ((EditableServiceProviderContext<T>)serviceProviderContext)
                                .filterService(serviceClass);
                    }
                    //do nothing
                    return false;
                }

                public void preInstallServices(List<Class<?>> foundServiceClasses)
                {
                    if(serviceProviderContext instanceof EditableServiceProviderContext)
                    {
                        ((EditableServiceProviderContext<T>)serviceProviderContext)
                                .preInstallServices(foundServiceClasses);
                    }
                }

                public ClassLoader getClassLoader()
                {
                    return serviceProviderContext.getClassLoader();
                }
            });

            for(T currentInstance : services)
            {
                result.add(currentInstance);
            }
        }
        return result;
    }