private void scanRootForLibraries(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();
              }
            }
          }
        }
      }
    }
  }
private void scanRootForLibraries(File fromRoot)