CachedASMReflector { @SuppressWarnings("try") public void createClassIndexes() { try (TelemetryUtils.ScopedSpan scope = TelemetryUtils.startScopedSpan("CachedASMReflector.createClassIndexes")) { this.jars .parallelStream() .forEach( wrapIOConsumer( root -> { String name = root.getName(); if (name.endsWith(".jar") && !name.endsWith("SNAPSHOT.jar") && ProjectDatabaseHelper.getLoadJar(root.getPath())) { List<ClassIndex> indexes = ProjectDatabaseHelper.getClassIndexes(root.getPath()); for (ClassIndex index : indexes) { index.loaded = true; String fqcn = index.getRawDeclaration(); this.globalClassIndex.put(fqcn, index); } } else { ASMReflector reflector = ASMReflector.getInstance(); reflector .getClasses(root) .entrySet() .parallelStream() .forEach(entry -> addClassIndex(entry.getKey(), entry.getValue())); if (name.endsWith(".jar") && !name.endsWith("SNAPSHOT.jar")) { ProjectDatabaseHelper.saveLoadJar(root.getPath()); } } })); this.updateClassIndexFromDirectory(); this.saveAllClassIndexes(); TelemetryUtils.recordClassIndexes(globalClassIndex.size()); } } private  CachedASMReflector(); static CachedASMReflector getInstance(); static boolean containsKeyword(
      final String keyword,
      final boolean partial,
      final CandidateUnit c,
      final boolean caseSensitive); static ClassIndex cloneClassIndex(ClassIndex c); void addClasspath(Collection<File> depends); void addClasspath(File dep); Map<String, ClassIndex> getGlobalClassIndex(); @SuppressWarnings("try") void createClassIndexes(); void createClassIndexes(Collection<File> addJars); void updateClassIndexFromDirectory(); boolean containsFQCN(String fqcn); File getClassFile(String fqcn); Map<String, String> getPackageClasses(String packageName); List<ClassIndex> searchInnerClasses(String parent); List<ClassIndex> searchInnerClasses(Set<String> parents); List<ClassIndex> searchClasses(final String keyword, final boolean includeAnnotation); Stream<ClassIndex> allClassStream(); List<MemberDescriptor> reflect(String className); Stream<MemberDescriptor> reflectMethodStream(String className, String name); Collection<MemberDescriptor> reflectMethods(String className, String name); Stream<MemberDescriptor> reflectConstructorStream(String className); Collection<MemberDescriptor> reflectConstructors(String className); Stream<String> getSuperClassStream(String className); Collection<String> getSuperClass(String className); Optional<ClassIndex> containsClassIndex(String className); Map<String, String> getStandardClasses(); void scanAllStaticMembers(); static int scan(File root, Consumer<String> c); Set<File> getJars();  }
@Ignore @Test public void testCreateClassIndexes() throws Exception { CachedASMReflector cachedASMReflector = CachedASMReflector.getInstance(); Stopwatch stopwatch = Stopwatch.createStarted(); cachedASMReflector.createClassIndexes(); System.out.println(stopwatch.stop()); assertTrue(9055 <= cachedASMReflector.getGlobalClassIndex().size()); }