fixed OrderEnumerator#getAllLibrariesAndSdkClassesRoots: don't include output directories of modules from dependencies for Maven projects (ZD-56377, IDEA-130329)

This commit is contained in:
nik
2015-05-08 10:31:45 +02:00
parent 21d9eaa95d
commit b2dae39aa3
3 changed files with 44 additions and 7 deletions
@@ -85,6 +85,8 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().withoutDepModules().withoutModuleSourceEntries());
assertEnumeratorRoots(orderEntries(myModule).productionOnly().withoutModuleSourceEntries().withoutSdk().withoutDepModules().classes());
assertOrderedEquals(orderEntries(myModule).getAllLibrariesAndSdkClassesRoots(), getRtJarJdk17(), getJDomJar());
}
public void testModuleDependencyScope() throws Exception {
@@ -25,8 +25,6 @@ import com.intellij.util.PathsList;
import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
/**
* Interface for convenient processing dependencies of a module or a project. Allows to process {@link OrderEntry}s and collect classes
* and source roots.<p>
@@ -82,7 +80,7 @@ public abstract class OrderEnumerator {
}
public VirtualFile[] getAllLibrariesAndSdkClassesRoots() {
return withoutModuleSourceEntries().recursively().exportedOnly().classes().usingCache().getRoots();
return withoutModuleSourceEntries().withoutDepModules().recursively().exportedOnly().classes().usingCache().getRoots();
}
public VirtualFile[] getAllSourceRoots() {
@@ -21,11 +21,9 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.impl.scopes.LibraryRuntimeClasspathScope;
import com.intellij.openapi.module.impl.scopes.ModuleWithDependenciesScope;
import com.intellij.openapi.roots.CompilerModuleExtension;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderEnumerator;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.impl.LibraryScopeCache;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
@@ -34,6 +32,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.PathsList;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.MavenImportingTestCase;
@@ -158,6 +157,44 @@ public class MavenClasspathsAndSearchScopesTest extends MavenImportingTestCase {
getProjectPath() + "/m4/target/classes");
}
public void testDoNotIncludeTargetDirectoriesOfModuleDependenciesToLibraryClassesRoots() throws Exception {
VirtualFile m = createModulePom("m", "<groupId>test</groupId>" +
"<artifactId>m</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>test</groupId>" +
" <artifactId>dep</artifactId>" +
" <version>1</version>" +
" </dependency>" +
"</dependencies>");
VirtualFile dep = createModulePom("dep", "<groupId>test</groupId>" +
"<artifactId>dep</artifactId>" +
"<version>1</version>" +
"<dependencies>" +
" <dependency>" +
" <groupId>junit</groupId>" +
" <artifactId>junit</artifactId>" +
" <version>4.0</version>" +
" </dependency>" +
"</dependencies>");
importProjects(m, dep);
assertModules("m", "dep");
assertModuleModuleDeps("m", "dep");
setupJdkForModules("m", "dep");
createOutputDirectories();
Module module = getModule("m");
VirtualFile[] jdkRoots = ModuleRootManager.getInstance(module).getSdk().getRootProvider().getFiles(OrderRootType.CLASSES);
VirtualFile[] junitRoots = LibraryTablesRegistrar.getInstance().getLibraryTable(myProject).getLibraryByName("Maven: junit:junit:4.0")
.getFiles(OrderRootType.CLASSES);
assertOrderedEquals(OrderEnumerator.orderEntries(module).getAllLibrariesAndSdkClassesRoots(), ArrayUtil.mergeArrays(jdkRoots, junitRoots));
}
public void testDoNotIncludeTestClassesWhenConfiguringModuleDependenciesForProductionCode() throws Exception {
VirtualFile m1 = createModulePom("m1", "<groupId>test</groupId>" +
"<artifactId>m1</artifactId>" +