protected List<ProviderInfo<? extends Object>> prepareProviders(boolean custom, boolean busGlobal, Object[] providers, ProviderInfo<Application> application) { List<ProviderInfo<? extends Object>> theProviders = new ArrayList<>(providers.length); for (Object o : providers) { if (o == null) { continue; } Object provider = o; if (provider.getClass() == Class.class) { provider = ResourceUtils.createProviderInstance((Class<?>)provider); } if (provider instanceof Constructor) { Map<Class<?>, Object> values = CastUtils.cast(application == null ? null : Collections.singletonMap(Application.class, application.getProvider())); theProviders.add( createProviderFromConstructor((Constructor<?>)provider, values, getBus(), true, custom)); } else if (provider instanceof ProviderInfo) { theProviders.add((ProviderInfo<?>)provider); } else { ProviderInfo<Object> theProvider = new ProviderInfo<>(provider, getBus(), custom); theProvider.setBusGlobal(busGlobal); theProviders.add(theProvider); } } return theProviders; }