From 534c9d9a92f410212171a5fe13d162ef8bc03ff7 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Fri, 19 Jul 2019 16:59:46 +0200 Subject: [PATCH] "Directory not found" error occurs when path to jar file is specified as Directory in "Find in Path" dialog (IDEA-218573) GitOrigin-RevId: 935c0431f6587479b96870833ee4826b50b85f86 --- .../com/intellij/find/FindManagerTest.java | 25 +++++++++++++++++++ .../intellij/find/impl/FindInProjectUtil.java | 3 +++ 2 files changed, 28 insertions(+) diff --git a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java index c5e649fc8698..ac428ec57900 100644 --- a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java @@ -26,12 +26,14 @@ import com.intellij.openapi.progress.util.ProgressIndicatorBase; import com.intellij.openapi.project.DumbServiceImpl; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.ProperTextRange; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -85,6 +87,29 @@ public class FindManagerTest extends DaemonAnalyzerTestCase { super.tearDown(); } + public void testFindInDirectoryCorrectlyFindVirtualFileForJars() { + FindModel findModel = FindManagerTestUtils.configureFindModel("done"); + VirtualFile[] files = getTestProjectJdk().getRootProvider().getFiles(OrderRootType.CLASSES); + VirtualFile rtJar = null; + for(VirtualFile file:files) { + if (file.getPath().contains("rt.jar")) { + rtJar = JarFileSystem.getInstance().getLocalVirtualFileFor(file); + break; + } + } + + assertNotNull(rtJar); + findModel.setProjectScope(false); + findModel.setDirectoryName(rtJar.getPath()); + assertNotNull(FindInProjectUtil.getDirectory(findModel)); + + VirtualFile jarRootForLocalFile = JarFileSystem.getInstance().getJarRootForLocalFile(rtJar); + VirtualFile jarPackageInRtJar = jarRootForLocalFile.findChild("java"); + assertNotNull(jarPackageInRtJar); + findModel.setDirectoryName(jarPackageInRtJar.getPath()); + assertNotNull(FindInProjectUtil.getDirectory(findModel)); + } + public void testFindString() throws InterruptedException { FindModel findModel = FindManagerTestUtils.configureFindModel("done"); @Language("JAVA") diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java index 933b40eab8a0..dbdc28283312 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java @@ -167,6 +167,9 @@ public class FindInProjectUtil { } } } + if (virtualFile == null && !path.contains(JarFileSystem.JAR_SEPARATOR)) { + virtualFile = JarFileSystem.getInstance().findFileByPath(path + JarFileSystem.JAR_SEPARATOR); + } } return virtualFile; }