From 905c8a06b1dcde96704c64d53ecaa24508fa1411 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Apr 2016 09:32:05 +0200 Subject: [PATCH] IDEA-154583 Resolve inside library through exported dependencies quirks --- .../com/intellij/roots/ModuleScopesTest.java | 20 +++++++++++++++++++ .../openapi/roots/impl/RootIndex.java | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java b/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java index ba5715407ecf..00e35eed1705 100644 --- a/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/ModuleScopesTest.java @@ -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)); + } } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java index 6dda1df689b2..b1cf97108d28 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java @@ -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;