RequiredClassesNotFoundInfo (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)); }