@Nullable
  public RequiredClassesNotFoundInfo checkLibraries(List<? extends VirtualFile> libraryFiles) {
    List<LibraryInfo> infos = new ArrayList<>();
    List<String> classes = new ArrayList<>();

    for (LibraryInfo info : myLibraryInfos) {
      boolean notFound;
      final String md5 = info.getMd5();
      if (!StringUtil.isEmptyOrSpaces(md5)) {
        notFound = true;
        for (VirtualFile libraryFile : libraryFiles) {
           final VirtualFile jarFile = JarFileSystem.getInstance().getVirtualFileForJar(libraryFile);
          if (md5.equals(md5(jarFile))) {
            notFound = false;
            break;
          }
        }
      } else {
        notFound = false;
        for (String className : info.getRequiredClasses()) {
          if (!LibraryUtil.isClassAvailableInLibrary(libraryFiles, className)) {
            classes.add(className);
            notFound = true;
          }
        }
      }

      if (notFound) {
        infos.add(info);
      }
    }
    if (infos.isEmpty()) {
      return null;
    }
    return new RequiredClassesNotFoundInfo(ArrayUtilRt.toStringArray(classes), infos.toArray(LibraryInfo.EMPTY_ARRAY));
  }
@Nullable
  public RequiredClassesNotFoundInfo checkLibraries(List<? extends VirtualFile> libraryFiles)