void (boolean unresolved, @NotNull Map<OrderRootType, Collection<File>> libraryFiles, @NotNull Set<String> excludedPaths, @NotNull Library.ModifiableModel model, @NotNull String libraryName) { for (Map.Entry<OrderRootType, Collection<File>> entry: libraryFiles.entrySet()) { for (File file: entry.getValue()) { VirtualFile virtualFile = unresolved ? null : VirtualFileManager.getInstance().findFileByNioPath(file.toPath().toAbsolutePath()); if (virtualFile == null) { if (!unresolved && ExternalSystemConstants.VERBOSE_PROCESSING && entry.getKey() == OrderRootType.CLASSES) { LOG.warn( String.format("Can't find %s of the library '%s' at path '%s'", entry.getKey(), libraryName, file.getAbsolutePath()) ); } String url = VfsUtil.getUrlForLibraryRoot(file); String[] urls = model.getUrls(entry.getKey()); if (!ArrayUtil.contains(url, urls)) { model.addRoot(url, entry.getKey()); } continue; } if (virtualFile.isDirectory()) { VirtualFile[] files = model.getFiles(entry.getKey()); if (!ArrayUtil.contains(virtualFile, files)) { model.addRoot(virtualFile, entry.getKey()); } } else { VirtualFile root = virtualFile; if (virtualFile.getFileType() instanceof ArchiveFileType) { root = JarFileSystem.getInstance().getJarRootForLocalFile(virtualFile); if (root == null) { LOG.warn(String.format( "Can't parse contents of the JAR file at path '%s' for the library '%s''", file.getAbsolutePath(), libraryName )); continue; } } VirtualFile[] files = model.getFiles(entry.getKey()); if (!ArrayUtil.contains(root, files)) { model.addRoot(root, entry.getKey()); } } } } if (model instanceof LibraryEx.ModifiableModelEx modelEx) { for (String excludedPath : excludedPaths) { String url = VfsUtil.getUrlForLibraryRoot(new File(excludedPath)); String[] urls = modelEx.getExcludedRootUrls(); if (!ArrayUtil.contains(url, urls)) { modelEx.addExcludedRoot(url); } } } }