conf.setScanners(new TypeElementsScanner(), new TypeAnnotationsScanner());
Reflections ref = new Reflections(new ConfigurationBuilder().setScanners(new SubTypesScanner(false), new ResourcesScanner(), new TypeElementsScanner()) ... Set<String> typeSet = reflections.getStore().getStoreMap().get("TypeElementsScanner").keySet(); HashSet<Class<? extends Object>> classes = Sets.newHashSet(ReflectionUtils.forNames(typeSet, reflections .getConfiguration().getClassLoaders()));
/** * Locate properties class for type class. * * @param type the type * @return the class */ public Class locatePropertiesClassForType(final ClassOrInterfaceType type) { if (cachedPropertiesClasses.containsKey(type.getNameAsString())) { return cachedPropertiesClasses.get(type.getNameAsString()); } val packageName = ConfigurationMetadataGenerator.class.getPackage().getName(); val reflections = new Reflections(new ConfigurationBuilder() .filterInputsBy(s -> s.contains(type.getNameAsString())) .setUrls(ClasspathHelper.forPackage(packageName)) .setScanners(new TypeElementsScanner() .includeFields(false) .includeMethods(false) .includeAnnotations(false) .filterResultsBy(s -> s.endsWith(type.getNameAsString())), new SubTypesScanner(false))); val clz = reflections.getSubTypesOf(Serializable.class).stream() .filter(c -> c.getSimpleName().equalsIgnoreCase(type.getNameAsString())) .findFirst() .orElseThrow(() -> new IllegalArgumentException("Cant locate class for " + type.getNameAsString())); cachedPropertiesClasses.put(type.getNameAsString(), clz); return clz; } }
/** * Add all the classes with a package prefix in the scope. * @param packageName the root package * @return the selector */ public Selector from(final String packageName) { Assertion.checkArgNotEmpty(packageName); checkScope(); // --- new Reflections(packageName, new TypeElementsScanner().includeAnnotations(false).includeFields(false).includeMethods(false)) .getStore() .get(TypeElementsScanner.class.getSimpleName()) .keys() .forEach(className -> from(ClassUtil.classForName(className))); return this; }
private static Collection<? extends Class<?>> getPackageTypes(String packageToPase, Collection<URL> urls) { Set<Class<?>> classes = new HashSet<>(); Reflections reflections = new Reflections(new ConfigurationBuilder() .setScanners(new SubTypesScanner(false /* exclude Object.class */), new ResourcesScanner(), new TypeElementsScanner()) .setUrls(urls) .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(packageToPase)).exclude("java.*"))); Set<String> types; types = reflections.getStore().get("TypeElementsScanner").keySet(); for (String type: types) { Class<?> aClass = TypesHelper.loadClass(type, CLASS_LOADER); boolean wantedElement = StringUtils.startsWith(type, packageToPase); if (null != aClass && wantedElement) { logger.log(Level.INFO, "looking up for type: " + type); classes.add(aClass); } } return classes; }
/** * Create {@link org.reflections.Configuration} object for given package name and class loader. * * @param packageName the root package to scan * @param classLoader class loader to be used in reflections * @return */ public static ConfigurationBuilder getReflectionsConfiguration(String packageName, ClassLoader classLoader) { return new ConfigurationBuilder() .addUrls(ClasspathHelper.forPackage(packageName, classLoader)) .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(packageName + "."))) .setScanners(new TypeElementsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner()); }
/** * Create {@link org.reflections.Configuration} object for given package name and class loader. * * @param packageName the root package to scan * @param classLoader class loader to be used in reflections * @return the configuration builder */ private static ConfigurationBuilder getReflectionsConfiguration(String packageName, ClassLoader classLoader) { return new ConfigurationBuilder() .addUrls(ClasspathHelper.forPackage(packageName, classLoader)) .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(packageName + "."))) .setScanners(new TypeElementsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner()); }