public Collection<String> findFunctionsInJar(File jarFile) throws IOException { ClassGraph fastClasspathScanner = new ClassGraph().disableDirScanning() .removeTemporaryFilesAfterScan().overrideClasspath(jarFile.getAbsolutePath()); ScanResult scanResult = fastClasspathScanner.enableClassInfo().scan(); Set<String> functionClasses = new HashSet<>(); functionClasses.addAll(scanResult.getClassesImplementing(Function.class.getName()).getNames()); functionClasses.addAll(scanResult.getSubclasses(FunctionAdapter.class.getName()).getNames()); return functionClasses; } }
result.getSubclasses(Jooby.class.getName()) .stream() .filter(once) .forEach(k -> result.getSubclasses(k.getName()) .stream() .filter(inPackage)
private static <T> List<Class<?>> searchForPublicConcreteSubTypesOf(final Class<T> type) { String typeName = type.getCanonicalName(); ClassInfoList subTypes = type.isInterface() ? scanResult.getClassesImplementing(typeName) : scanResult.getSubclasses(typeName); List<Class<?>> loadedSubTypes = subTypes.filter(subType -> subType.isPublic() && !subType.isAbstract()).loadClasses(true); return Collections.unmodifiableList(loadedSubTypes); } }
/** * Returns all the subtypes (interface or abstract) of a given class type * * @param <T> * The type to check * @param type * variable * * @return A set of classes matching */ @NotNull @SuppressWarnings("unchecked") public <T> Set<Class<? extends T>> getSubTypesOf(Class<T> type) { ClassInfoList subtypes = GuiceContext.instance() .getScanResult() .getSubclasses(type.getCanonicalName()); return new HashSet(subtypes.loadClasses()); }
private static <T> List<Class<?>> searchForPublicConcreteSubTypesOf(final Class<T> type) { String typeName = type.getCanonicalName(); ClassInfoList subTypes = type.isInterface() ? scanResult.getClassesImplementing(typeName) : scanResult.getSubclasses(typeName); List<Class<?>> loadedSubTypes = subTypes.filter(subType -> subType.isPublic() && !subType.isAbstract()).loadClasses(true); return Collections.unmodifiableList(loadedSubTypes); } }
/** * Returns all the subtypes (interface or abstract) of a given class type * * @param <T> * The type to check * @param type * variable * * @return A set of classes matching */ @NotNull @SuppressWarnings("unchecked") public <T> Set<Class<? extends T>> getSubTypesOf(Class<T> type) { ClassInfoList subtypes = GuiceContext.instance() .getScanResult() .getSubclasses(type.getCanonicalName()); return new HashSet(subtypes.loadClasses()); }
/** * Returns all the subtypes (interface or abstract) of a given class type * * @param <T> * The type to check * @param type * variable * * @return A set of classes matching */ @NotNull @SuppressWarnings("unchecked") public <T> Set<Class<? extends T>> getSubTypesOf(Class<T> type) { ClassInfoList subtypes = GuiceContext.instance() .getScanResult() .getSubclasses(type.getCanonicalName()); return new HashSet(subtypes.loadClasses()); }
@Override public void load(Collection<PluginMetaData> plugins) { List<KotlinPluginScript> pluginScripts = new ArrayList<>(); ClassGraph classGraph = new ClassGraph().enableAllInfo(); try (ScanResult scanResult = classGraph.scan()) { ClassInfoList pluginClassList = scanResult .getSubclasses(KotlinPluginScript.class.getName()) .directOnly(); for (ClassInfo pluginClassInfo : pluginClassList) { Class<KotlinPluginScript> scriptClass = pluginClassInfo.loadClass(KotlinPluginScript.class); Constructor<KotlinPluginScript> scriptConstructor = scriptClass.getConstructor(World.class, PluginContext.class); pluginScripts.add(scriptConstructor.newInstance(world, context)); logger.info(String.format("Loaded plugin: %s", pluginDescriptor(scriptClass))); } } catch (Exception e) { throw new RuntimeException(e); } pluginScripts.forEach(script -> script.doStart(world)); }
classes.addAll(scanResult.getSubclasses(name).getNames());
classInfos = scanResult.getSubclasses(handledType.getName());