From bda54935790263d0a98459fafe9ae7eb92a14a17 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 29 Jun 2018 18:22:39 +0300 Subject: [PATCH] project configuration: restore excluded roots after refreshing a repository library (IDEA-194717) --- .../configuration/libraryEditor/NewLibraryEditor.java | 11 ++++++++--- .../idea/maven/utils/library/RepositoryUtils.java | 11 +++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/NewLibraryEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/NewLibraryEditor.java index a7d64b5e0a59..823743000bff 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/NewLibraryEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/NewLibraryEditor.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; /** @@ -215,13 +216,13 @@ public class NewLibraryEditor extends LibraryEditorBase { public void applyTo(@NotNull LibraryEx.ModifiableModelEx model) { model.setProperties(myProperties); - exportRoots(model::getUrls, model::isValid, model::removeRoot, model::addRoot, model::addJarDirectory); + exportRoots(model::getUrls, model::isValid, model::removeRoot, model::addRoot, model::addJarDirectory, model::addExcludedRoot); } public void applyTo(@NotNull LibraryEditorBase editor) { editor.setProperties(myProperties); - exportRoots(editor::getUrls, editor::isValid, editor::removeRoot, editor::addRoot, editor::addJarDirectory); + exportRoots(editor::getUrls, editor::isValid, editor::removeRoot, editor::addRoot, editor::addJarDirectory, editor::addExcludedRoot); } private void exportRoots( @@ -229,7 +230,8 @@ public class NewLibraryEditor extends LibraryEditorBase { final BiFunction isValid, final BiConsumer removeRoot, final BiConsumer addRoot, - final TriConsumer addJarDir) { + final TriConsumer addJarDir, + final Consumer addExcludedRoot) { // first, clean the target container optionally preserving invalid paths for (OrderRootType type : OrderRootType.getAllTypes()) { @@ -260,6 +262,9 @@ public class NewLibraryEditor extends LibraryEditorBase { addJarDir.accept(url, true, type); } } + for (LightFilePointer root: myExcludedRoots) { + addExcludedRoot.accept(root.getUrl()); + } } private static void collectJarFiles(@NotNull VirtualFile dir, @NotNull List container, final boolean recursively) { diff --git a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryUtils.java b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryUtils.java index 3aa562aa0e9b..049aa275c816 100644 --- a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryUtils.java +++ b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryUtils.java @@ -35,6 +35,7 @@ import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEdito import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.util.PathUtil; import com.intellij.util.containers.JBIterable; import org.jetbrains.annotations.NotNull; @@ -43,6 +44,7 @@ import org.jetbrains.concurrency.AsyncPromise; import org.jetbrains.concurrency.Promise; import java.util.*; +import java.util.stream.Collectors; public class RepositoryUtils { private static final Logger LOG = Logger.getInstance("#org.jetbrains.idea.maven.utils.library.RepositoryUtils"); @@ -95,6 +97,7 @@ public class RepositoryUtils { } final RepositoryLibraryProperties properties = (RepositoryLibraryProperties)library.getProperties(); String[] annotationUrls = library.getUrls(AnnotationOrderRootType.getInstance()); + String[] excludedRootUrls = library.getExcludedRootUrls(); return JarRepositoryManager.loadDependenciesAsync( project, properties, downloadSources, downloadJavaDocs, null, copyTo).thenAsync(roots -> { @@ -118,6 +121,14 @@ public class RepositoryUtils { for (String url : annotationUrls) { editor.addRoot(url, AnnotationOrderRootType.getInstance()); } + List allRootUrls = editor.getOrderRootTypes().stream() + .flatMap(type -> Arrays.stream(editor.getUrls(type))) + .collect(Collectors.toList()); + for (String excludedRootUrl: excludedRootUrls) { + if (VfsUtilCore.isUnder(excludedRootUrl, allRootUrls)) { + editor.addExcludedRoot(excludedRootUrl); + } + } final LibraryEx.ModifiableModelEx model = library.getModifiableModel(); editor.applyTo(model); model.commit();