serviceTypes.forEach(it -> spec.add(it.getPackage().getName())); ClassGraph scanner = new ClassGraph().enableAllInfo() .whitelistPackages(spec.toArray(new String[spec.size()]));
@SuppressWarnings("unchecked") SimpleConversionCallback(String... packages) { // Scan the packages for the converters. try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages(packages).scan()) { ClassInfoList controlClasses = scanResult.getClassesImplementing(AttributeConverter.class.getName()); List<Class<?>> controlClassRefs = controlClasses.loadClasses(); this.converters = controlClassRefs.stream() .map(clazz -> (Class<AttributeConverter>) clazz) .collect(Collectors.toMap( converter -> (ParameterizedType) Arrays.stream(converter.getGenericInterfaces()) .filter(type -> type instanceof ParameterizedType) .filter(type -> ((ParameterizedType) type).getRawType().equals(AttributeConverter.class)) .findFirst() .orElseThrow(() -> new IllegalArgumentException( format("The converter %s must implement AttributeConverter interface", converter.getSimpleName()))), converter -> converter )); } }
@SuppressWarnings("unchecked") public static Set<AbstractAtlasShellToolsCommand> getSubcommandInstances() { final List<Class<? extends AtlasShellToolsMarkerInterface>> subcommandClasses = new ArrayList<>(); final Set<AbstractAtlasShellToolsCommand> instantiatedCommands = new HashSet<>(); try (ScanResult scanResult = new ClassGraph().enableAllInfo().scan()) { final ClassInfoList classInfoList = scanResult .getClassesImplementing(AtlasShellToolsMarkerInterface.class.getName()); classInfoList.loadClasses().forEach(klass -> subcommandClasses .add((Class<? extends AtlasShellToolsMarkerInterface>) klass)); } subcommandClasses.stream().forEach(klass -> instantiateSubcommand(klass.getName()) .ifPresent(instantiatedCommands::add)); return instantiatedCommands; }
@SuppressWarnings("unchecked") @Override protected Stream<Class<? extends FlexibleSubCommand>> getSupportedCommands() { final List<Class<? extends FlexibleSubCommand>> returnValue = new ArrayList<>(); try (ScanResult scanResult = new ClassGraph().enableAllInfo() .whitelistPackages(AtlasReader.class.getPackage().getName()).scan()) { final ClassInfoList classInfoList = scanResult .getClassesImplementing(FlexibleSubCommand.class.getName()); classInfoList.loadClasses() .forEach(klass -> returnValue.add((Class<? extends FlexibleSubCommand>) klass)); } return returnValue.stream(); } }
/** * Default behavior finds all FlexibleSubCommands in the classpath. Override to restrict the set * of classes returned * * @return a stream containing all of the subcommands we want to support */ @SuppressWarnings("unchecked") protected Stream<Class<? extends FlexibleSubCommand>> getSupportedCommands() { final List<Class<? extends FlexibleSubCommand>> returnValue = new ArrayList<>(); try (ScanResult scanResult = new ClassGraph().enableAllInfo().scan()) { final ClassInfoList classInfoList = scanResult .getClassesImplementing(FlexibleSubCommand.class.getName()); classInfoList.loadClasses() .forEach(klass -> returnValue.add((Class<? extends FlexibleSubCommand>) klass)); } return returnValue.stream(); }
@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)); }
/** * Searches for the implementations/subtypes of the given class. Only the matching classes are loaded. * * @param superType The type the implementations/subtypes of which are to be searched for * @param packages The packages to limit the search to * * @return A collection of classes discovered that implementation/extend {@code superType} */ public List<Class<?>> findImplementations(Class superType, Predicate<ClassInfo> filter, String... packages) { String[] scanPackages = Utils.emptyIfNull(packages); String cacheKey = Arrays.stream(scanPackages).sorted().collect(Collectors.joining()); ScanResult scanResults = cache.computeIfAbsent(cacheKey, k -> new ClassGraph() .whitelistPackages(packages) .enableAllInfo() .initializeLoadedClasses() .scan()); try { return scanResults.getAllClasses().stream() .filter(impl -> superType.isInterface() ? impl.implementsInterface(superType.getName()) : impl.extendsSuperclass(superType.getName())) .filter(filter == null ? info -> true : filter) .flatMap(info -> loadClass(info, superType)) .collect(Collectors.toList()); } catch (Exception e) { log.error("Failed to auto discover the subtypes of " + superType.getName() + ". Error encountered while scanning the classpath/modulepath.", e); return Collections.emptyList(); } }
public static void checkInitByAnnotatedClass() { if (!annotatedClassInitialized) { // look for classes annotated with @Properties try (ScanResult scanResult = new ClassGraph().enableAllInfo().scan()) { ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(io.github.thingersoft.pm.api.annotations.Properties.class.getName()); for (ClassInfo mappedClassInfo : classInfoList) { Class<?> mappedClass = mappedClassInfo.loadClass(); initByAnnotatedClass(mappedClass); } } catch (IllegalArgumentException e) { throw new RuntimeException("Properties injection mapping failed", e); } } }
public Validators(final String packageName) { this.validatorTypes = new EnumMap<>(Validation.class); this.validators = new ValidatorMap(); fillValidatorTypes(this.validatorTypes); final List<Class<?>> klasses = new ArrayList<>(); // Scan all classes in the given package with the Tag annotation try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages(packageName) .scan()) { final ClassInfoList tagClassInfoList = scanResult .getClassesWithAnnotation("org.openstreetmap.atlas.tags.annotations.Tag"); tagClassInfoList.loadClasses().forEach(klasses::add); } klasses.stream().forEach(this::processClass); }
private Set<Class<?>> scanClasses(final Set<Class<? extends Annotation>> supportedAnnotations) { Set<Class<?>> result = new LinkedHashSet<>(); ClassGraph classGraph = new ClassGraph() .enableAllInfo() .enableExternalClasses(); List<String> basePackages = this.properties.getBasePackages(); if (basePackages != null && !basePackages.isEmpty()) { classGraph = classGraph.whitelistPackages(basePackages.toArray(new String[0])); } try (ScanResult scanResult = classGraph.scan()) { for (final Class<? extends Annotation> supportedAnnotation : supportedAnnotations) { result.addAll(scanResult.getClassesWithAnnotation(supportedAnnotation.getName()).loadClasses(true)); result.addAll(scanResult.getClassesWithMethodAnnotation(supportedAnnotation.getName()).loadClasses(true)); result.addAll(scanResult.getClassesWithFieldAnnotation(supportedAnnotation.getName()).loadClasses(true)); } } return result; }
LOGGER.info("CsvAnnotationBeanBuilder scanning url:'{}' for CSVMarshaller annotations", fin); try (ScanResult scanResult = new ClassGraph() .enableAllInfo() .overrideClasspath(fin) .scan()) {
try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages(packageName) .scan())
public ScanResult getScanResult() { if (scanResult == null) { TypeScriptGenerator.getLogger().info("Scanning classpath"); final Date scanStart = new Date(); ClassGraph classGraph = new ClassGraph().enableAllInfo(); if (classLoader != null) { classGraph = classGraph.overrideClasspath((Object[])classLoader.getURLs()); } if (verbose) { classGraph = classGraph.verbose(); } final ScanResult result = classGraph.scan(); final int count = result.getAllClasses().size(); final Date scanEnd = new Date(); final double timeInSeconds = (scanEnd.getTime() - scanStart.getTime()) / 1000.0; TypeScriptGenerator.getLogger().info(String.format("Scanning finished in %.2f seconds. Total number of classes: %d.", timeInSeconds, count)); scanResult = result; } return scanResult; }
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE", justification = "https://github.com/spotbugs/spotbugs/issues/756") public void scanClasses() throws IOException { ClassGraph classGraph = new ClassGraph() .enableAllInfo() .enableExternalClasses() .enableSystemJarsAndModules(); classGraph = getClassGraphConfigurer().apply(classGraph); try (ScanResult scanResult = classGraph.scan()) { for (ScanResultHandler scanResultHandler : this.scanResultHandlers) { scanResultHandler.handle(scanResult, getBaseDir()); } } } }