private void evaluateMethod(Object extension, Method method, List<Object> results) { try { Object result = method.invoke(extension); if (result != null) { if (result instanceof Class<?>) { results.addAll(componentContainer.getComponentsByType((Class<?>) result)); } else if (result instanceof Collection<?>) { results.addAll((Collection<?>) result); } else if (result.getClass().isArray()) { for (int i = 0; i < Array.getLength(result); i++) { results.add(Array.get(result, i)); } } else { results.add(result); } } } catch (Exception e) { throw new IllegalStateException("Can not invoke method " + method, e); } }
private static void completeBatchExtensions(ComponentContainer container, List<Object> extensions, @Nullable Class type) { if (container != null) { extensions.addAll(container.getComponentsByType(type != null ? type : BatchExtension.class)); completeBatchExtensions(container.getParent(), extensions, type); } }
public ExtensionInstaller install(ComponentContainer container, ExtensionMatcher matcher) { // core components for (Object o : BatchComponents.all(analysisMode)) { doInstall(container, matcher, null, o); } // plugin extensions for (Map.Entry<PluginMetadata, Plugin> entry : pluginRepository.getPluginsByMetadata().entrySet()) { PluginMetadata metadata = entry.getKey(); Plugin plugin = entry.getValue(); for (Object extension : plugin.getExtensions()) { doInstall(container, matcher, metadata, extension); } } List<ExtensionProvider> providers = container.getComponentsByType(ExtensionProvider.class); for (ExtensionProvider provider : providers) { Object object = provider.provide(); if (object instanceof Iterable) { for (Object extension : (Iterable) object) { doInstall(container, matcher, null, extension); } } else { doInstall(container, matcher, null, object); } } return this; }