From 8d06f7224a8b3ef3696719ff56a853d3281bb5b4 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 28 Mar 2012 14:37:19 +0400 Subject: [PATCH] IDEA-55557: Attaching jar file sources in a module dependency (to another modules src) causes classpath issues --- .../resolve/class/ModuleSourceAsLibrarySource.java | 3 +++ .../resolve/class/ModuleSourceAsLibrarySourceDep.java | 1 + .../com/intellij/psi/resolve/ResolveClassTest.java | 11 +++++++++++ .../src/com/intellij/testFramework/PsiTestCase.java | 4 ++-- .../openapi/roots/impl/DirectoryIndexImpl.java | 3 +-- 5 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java create mode 100644 java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java new file mode 100644 index 000000000000..ae7482c76f32 --- /dev/null +++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySource.java @@ -0,0 +1,3 @@ +public class ModuleSourceAsLibrarySource { + ModuleSourceAsLibrarySourceDep field; +} diff --git a/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java new file mode 100644 index 000000000000..78a8b08ecc6f --- /dev/null +++ b/java/java-tests/testData/psi/resolve/class/ModuleSourceAsLibrarySourceDep.java @@ -0,0 +1 @@ +public class ModuleSourceAsLibrarySourceDep {} diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java index b67073bfcbca..8eab910851f0 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveClassTest.java @@ -8,6 +8,7 @@ import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -155,6 +156,16 @@ public class ResolveClassTest extends ResolveTestCase { assertNull(target); } + public void testModuleSourceAsLibrarySource() throws Exception { + final PsiReference ref = configure(); + final VirtualFile file = ref.getElement().getContainingFile().getVirtualFile(); + assertNotNull(file); + createFile(myModule, file.getParent(), "ModuleSourceAsLibrarySourceDep.java", loadFile("class/ModuleSourceAsLibrarySourceDep.java")); + addLibraryToRoots(file.getParent(), OrderRootType.SOURCES); + + assertInstanceOf(ref.resolve(), PsiClass.class); + } + public void testStaticImportInTheSameClass() throws Exception { PsiReference ref = configure(); long start = System.currentTimeMillis(); diff --git a/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java b/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java index 35d132f23637..ec471600d9f5 100644 --- a/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/PsiTestCase.java @@ -216,7 +216,7 @@ public abstract class PsiTestCase extends ModuleTestCase { addLibraryToRoots(myModule, jarFile, rootType); } - protected static void addLibraryToRoots(final Module module, final VirtualFile jarFile, final OrderRootType rootType) { + protected static void addLibraryToRoots(final Module module, final VirtualFile root, final OrderRootType rootType) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { @@ -224,7 +224,7 @@ public abstract class PsiTestCase extends ModuleTestCase { final ModifiableRootModel rootModel = manager.getModifiableModel(); final Library jarLibrary = rootModel.getModuleLibraryTable().createLibrary(); final Library.ModifiableModel libraryModel = jarLibrary.getModifiableModel(); - libraryModel.addRoot(jarFile, rootType); + libraryModel.addRoot(root, rootType); libraryModel.commit(); rootModel.commit(); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java index 6090e7ab87ae..6c8dd4145c98 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java @@ -248,7 +248,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone DirectoryInfo info = stateAndDirs.first.myDirToInfoMap.get(dir); assert info != null; - if (!info.isInLibrarySource || info.libraryClassRoot != null) { + if (!info.isInLibrarySource || info.isInModuleSource || info.libraryClassRoot != null) { if (!consumer.process(dir)) return false; } } @@ -613,7 +613,6 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone if (definedPackage != null && definedPackage.isEmpty()) return; // another library source root starts here } - info.isInModuleSource = false; info.isInLibrarySource = true; info.sourceRoot = sourceRoot; setPackageName(dir, packageName);