"Directory not found" error occurs when path to jar file is specified as Directory in "Find in Path" dialog (IDEA-218573)

GitOrigin-RevId: 935c0431f6587479b96870833ee4826b50b85f86
This commit is contained in:
Maxim.Mossienko
2019-07-19 18:02:30 +03:00
committed by intellij-monorepo-bot
parent 99d4500eed
commit 534c9d9a92
2 changed files with 28 additions and 0 deletions
@@ -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")
@@ -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;
}