IDEA-154583 Resolve inside library through exported dependencies quirks

This commit is contained in:
peter
2016-04-26 09:53:22 +02:00
parent 5a16d4daa2
commit 905c8a06b1
2 changed files with 21 additions and 1 deletions
@@ -26,6 +26,7 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderEnumerator;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.impl.ResolveScopeManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.ModuleTestCase;
import com.intellij.testFramework.PsiTestUtil;
@@ -309,4 +310,23 @@ public class ModuleScopesTest extends ModuleTestCase {
assertEquals(deps, deps2);
assertEquals(depsTests, depsTests2);
}
public void testHonorExportsWhenCalculatingLibraryScope() throws IOException {
Module a = createModule("a.iml", StdModuleTypes.JAVA);
Module b = createModule("b.iml", StdModuleTypes.JAVA);
Module c = createModule("c.iml", StdModuleTypes.JAVA);
ModuleRootModificationUtil.addDependency(a, b, DependencyScope.COMPILE, true);
ModuleRootModificationUtil.addDependency(b, c, DependencyScope.COMPILE, true);
final VirtualFile libFile1 = myFixture.createFile("lib1/a.txt", "");
final VirtualFile libFile2 = myFixture.createFile("lib2/a.txt", "");
ModuleRootModificationUtil.addModuleLibrary(a, "l", Collections.singletonList(libFile1.getParent().getUrl()),
Collections.emptyList(), Collections.emptyList(), DependencyScope.COMPILE, true);
ModuleRootModificationUtil.addModuleLibrary(c, "l", Collections.singletonList(libFile2.getParent().getUrl()),
Collections.emptyList(), Collections.emptyList(), DependencyScope.COMPILE, true);
assertTrue(ResolveScopeManager.getElementResolveScope(getPsiManager().findFile(libFile1)).contains(libFile2));
assertTrue(ResolveScopeManager.getElementResolveScope(getPsiManager().findFile(libFile2)).contains(libFile1));
}
}
@@ -249,7 +249,7 @@ public class RootIndex {
final Module depModule = moduleOrderEntry.getModule();
if (depModule != null) {
Node node = graph.myNodes.get(depModule);
OrderEnumerator en = OrderEnumerator.orderEntries(depModule).exportedOnly();
OrderEnumerator en = OrderEnumerator.orderEntries(depModule).exportedOnly().recursively();
if (node == null) {
node = new Node();
node.myKey = depModule;