void (File fromRoot) { if (isIgnoredName(fromRoot)) { return; } final File[] files = fromRoot.listFiles(); if (files != null) { myProgress.checkCanceled(); for (File file : files) { if (file.isDirectory()) { scanRootForLibraries(file); } else { @NlsSafe final String fileName = file.getName(); if (isLibraryFile(fileName)) { if (!myJarToPackagesMap.containsKey(file)) { final HashSet<String> libraryPackages = new HashSet<>(); myJarToPackagesMap.put(file, libraryPackages); myProgress.pushState(); myProgress.setText2(fileName); try { scanLibraryForDeclaredPackages(file, s -> { if (!libraryPackages.contains(s)) { libraryPackages.add(myInterner.intern(s)); } }); } catch (IOException e) { LOG.info(e); } catch (IllegalArgumentException e) { // may be thrown from java.util.zip.ZipCoder.toString for corrupted archive LOG.info(e); } catch (InternalError e) { // indicates that file is somehow damaged and cannot be processed LOG.info(e); } finally { myProgress.popState(); } } } } } } }