/** * Finds types extending {@link ServicesCoreBootstrapGuiceModule}: {@link * BeanImplementedServicesCoreGuiceModule}, {@link RESTImplementedServicesCoreGuiceModuleBase}, * etc if no type is found it returns null * * @param coreAppCode * @param coreModule * @return */ @SuppressWarnings("unchecked") private Set<Class<? extends ServicesCoreBootstrapGuiceModule>> _findCoreGuiceModulesOrNull( final Collection<CoreAppCode> coreAppCodes, final Class<? extends ServicesCoreBootstrapGuiceModule> coreGuiceModuleType) { List<String> pckgs = Lists.newLinkedList(); pckgs.add(ServicesCoreBootstrapGuiceModule.class.getPackage().getName()); pckgs.add(R01F.class.getPackage().getName()); // r01f.internal for (CoreAppCode coreAppCode : coreAppCodes) { pckgs.add(ServicesPackages.coreGuiceModulePackage(coreAppCode)); } Set<?> foundBootstrapModuleTypes = ServicesPackages.findSubTypesAt( coreGuiceModuleType, pckgs, this.getClass().getClassLoader()); // Filter the interfaces Set<Class<? extends ServicesCoreBootstrapGuiceModule>> outModuleTypes = (Set<Class<? extends ServicesCoreBootstrapGuiceModule>>) foundBootstrapModuleTypes; return FluentIterable.from(outModuleTypes) .filter( new Predicate<Class<? extends ServicesCoreBootstrapGuiceModule>>() { @Override public boolean apply(final Class<? extends ServicesCoreBootstrapGuiceModule> module) { return ReflectionUtils.isInstanciable(module); } }) .toSet(); }