diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java index 8d0c17ce5492..8e8e2200e683 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java @@ -34,6 +34,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import javax.swing.*; import java.util.*; @@ -78,12 +79,15 @@ public class CreateModuleLibraryChooser implements ClasspathElementChooser roots, @Nullable final LibraryType libraryType) { + private static Library createLibraryFromRoots(@NotNull List roots, + @Nullable final LibraryType libraryType, + @NotNull LibraryTable.ModifiableModel moduleLibrariesModel, + @Nullable Function defaultPropertiesFactory) { final PersistentLibraryKind kind = libraryType == null ? null : libraryType.getKind(); - final Library library = myModuleLibrariesModel.createLibrary(null, kind); + final Library library = moduleLibrariesModel.createLibrary(null, kind); final LibraryEx.ModifiableModelEx libModel = (LibraryEx.ModifiableModelEx)library.getModifiableModel(); - if (myDefaultPropertiesFactory != null) { - libModel.setProperties(myDefaultPropertiesFactory.fun(libraryType)); + if (defaultPropertiesFactory != null) { + libModel.setProperties(defaultPropertiesFactory.fun(libraryType)); } for (OrderRoot root : roots) { if (root.isJarDirectory()) { @@ -97,30 +101,21 @@ public class CreateModuleLibraryChooser implements ClasspathElementChooser filterAlreadyAdded(final List roots) { + private static List filterAlreadyAdded(final List roots, LibraryTable.ModifiableModel moduleLibrariesModel) { if (roots == null || roots.isEmpty()) { return Collections.emptyList(); } final List result = new ArrayList(); - final Library[] libraries = myModuleLibrariesModel.getLibraries(); + final Library[] libraries = moduleLibrariesModel.getLibraries(); for (OrderRoot root : roots) { - if (!isIncluded(root, libraries)) { + if (!Arrays.stream(libraries).anyMatch(library -> ArrayUtil.contains(root.getFile(), library.getFiles(root.getType())))) { result.add(root); } } return result; } - private static boolean isIncluded(OrderRoot root, Library[] libraries) { - for (Library library : libraries) { - if (ArrayUtil.contains(root.getFile(), library.getFiles(root.getType()))) { - return true; - } - } - return false; - } - @Override @NotNull public List chooseElements() { @@ -179,7 +174,21 @@ public class CreateModuleLibraryChooser implements ClasspathElementChooser chosenRoots = RootDetectionUtil.detectRoots(Arrays.asList(files), myParentComponent, project, rootsComponentDescriptor); - final List roots = filterAlreadyAdded(chosenRoots); + return createLibrariesFromRoots(chosenRoots, libraryType, myModuleLibrariesModel, myDefaultPropertiesFactory); + } + + @TestOnly + @NotNull + public static List createLibrariesFromRoots(List chosenRoots, LibraryTable.ModifiableModel moduleLibrariesModel) { + return createLibrariesFromRoots(chosenRoots, null, moduleLibrariesModel, null); + } + + @NotNull + private static List createLibrariesFromRoots(@NotNull List chosenRoots, + @Nullable LibraryType libraryType, + @NotNull LibraryTable.ModifiableModel moduleLibrariesModel, + @Nullable Function defaultPropertiesFactory) { + final List roots = filterAlreadyAdded(chosenRoots, moduleLibrariesModel); if (roots.isEmpty()) { return Collections.emptyList(); } @@ -191,11 +200,12 @@ public class CreateModuleLibraryChooser implements ClasspathElementChooser libraries = createLibraries(new OrderRoot(getJDomJar(), OrderRootType.CLASSES), + new OrderRoot(getAsmJar(), OrderRootType.CLASSES)); + assertEquals(2, libraries.size()); + assertNull(libraries.get(0).getName()); + assertSameElements(libraries.get(0).getFiles(OrderRootType.CLASSES), getJDomJar()); + assertNull(libraries.get(1).getName()); + assertSameElements(libraries.get(1).getFiles(OrderRootType.CLASSES), getAsmJar()); + } + + @NotNull + private List createLibraries(OrderRoot... roots) { + return CreateModuleLibraryChooser.createLibrariesFromRoots(Arrays.asList(roots), myModifiableModel); + } + + @Override + protected void tearDown() throws Exception { + myModifiableRootModel.dispose(); + super.tearDown(); + } +}