project configuration: restore excluded roots after refreshing a repository library (IDEA-194717)

This commit is contained in:
nik
2018-07-02 11:08:07 +03:00
parent 5c4f3dc50a
commit bda5493579
2 changed files with 19 additions and 3 deletions
@@ -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<String, OrderRootType, Boolean> isValid,
final BiConsumer<String, OrderRootType> removeRoot,
final BiConsumer<String, OrderRootType> addRoot,
final TriConsumer<String, Boolean, OrderRootType> addJarDir) {
final TriConsumer<String, Boolean, OrderRootType> addJarDir,
final Consumer<String> 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<VirtualFile> container, final boolean recursively) {
@@ -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<String> 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();