99import java .util .HashMap ;
1010import java .util .HashSet ;
1111import java .util .LinkedList ;
12+ import java .util .List ;
1213import java .util .Map ;
1314import java .util .Scanner ;
1415import java .util .jar .JarEntry ;
@@ -28,8 +29,12 @@ public class ClassUtil {
2829
2930 static private final void ensureCache () {
3031 synchronized (class_urls ) {
31- if (class_urls .isEmpty ())
32- class_urls .putAll (findAllClasses ());
32+ if (class_urls .isEmpty ()) {
33+ final ArrayList <String > dirs = new ArrayList <>();
34+ dirs .add (System .getProperty ("java.home" ));
35+ dirs .add (System .getProperty ("ij.dir" ));
36+ class_urls .putAll (findAllClasses (dirs ));
37+ }
3338 }
3439 }
3540
@@ -161,25 +166,22 @@ public JarProperties(final String name, final ArrayList<String> urls) {
161166 }
162167 }
163168
164- static public final HashMap <String , JarProperties > findAllClasses () {
169+ static public final HashMap <String , JarProperties > findAllClasses (final List < String > jar_folders ) {
165170 // Find all jar files
166171 final ArrayList <String > jarFilePaths = new ArrayList <String >();
167- final LinkedList <String > dirs = new LinkedList <>();
168- dirs .add (System .getProperty ("java.home" ));
169- dirs .add (System .getProperty ("ij.dir" ));
172+ final LinkedList <String > dirs = new LinkedList <>(jar_folders );
170173 final HashSet <String > seenDirs = new HashSet <>();
171174 while (!dirs .isEmpty ()) {
172175 final String filepath = dirs .removeFirst ();
176+ if (null == filepath ) continue ;
173177 final File file = new File (filepath );
174178 seenDirs .add (file .getAbsolutePath ());
175- if (file .exists ()) {
176- if (file .isDirectory ()) {
177- for (final File child : file .listFiles ()) {
178- final String childfilepath = child .getAbsolutePath ();
179- if (seenDirs .contains (childfilepath )) continue ;
180- if (child .isDirectory ()) dirs .add (childfilepath );
181- else if (childfilepath .endsWith (".jar" )) jarFilePaths .add (childfilepath );
182- }
179+ if (file .exists () && file .isDirectory ()) {
180+ for (final File child : file .listFiles ()) {
181+ final String childfilepath = child .getAbsolutePath ();
182+ if (seenDirs .contains (childfilepath )) continue ;
183+ if (child .isDirectory ()) dirs .add (childfilepath );
184+ else if (childfilepath .endsWith (".jar" )) jarFilePaths .add (childfilepath );
183185 }
184186 }
185187 }
0 commit comments