mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
restore text search in directories outside project (IDEA-122322)
This commit is contained in:
@@ -539,6 +539,22 @@ public class FindManagerTest extends DaemonAnalyzerTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testFindInDirectoryOutsideProject() throws Exception {
|
||||
final TempDirTestFixture tempDirFixture = new TempDirTestFixtureImpl();
|
||||
tempDirFixture.setUp();
|
||||
try {
|
||||
tempDirFixture.createFile("a.txt", "foo bar foo");
|
||||
FindModel findModel = FindManagerTestUtils.configureFindModel("foo");
|
||||
findModel.setWholeWordsOnly(true);
|
||||
findModel.setProjectScope(false);
|
||||
findModel.setDirectoryName(tempDirFixture.getFile("").getPath());
|
||||
assertSize(2, findUsages(findModel));
|
||||
}
|
||||
finally {
|
||||
tempDirFixture.tearDown();
|
||||
}
|
||||
}
|
||||
|
||||
public void testFindInJavaDocs() {
|
||||
FindModel findModel = FindManagerTestUtils.configureFindModel("done");
|
||||
String text = "/** done done done */";
|
||||
|
||||
@@ -224,6 +224,8 @@ class FindInProjectTask {
|
||||
SearchScope customScope = myFindModel.getCustomScope();
|
||||
final GlobalSearchScope globalCustomScope = toGlobal(customScope);
|
||||
|
||||
final ProjectFileIndex fileIndex = ProjectFileIndex.SERVICE.getInstance(myProject);
|
||||
|
||||
class EnumContentIterator implements ContentIterator {
|
||||
final Set<PsiFile> myFiles = new LinkedHashSet<PsiFile>();
|
||||
|
||||
@@ -238,7 +240,8 @@ class FindInProjectTask {
|
||||
return;
|
||||
}
|
||||
|
||||
if (skipIndexed && isCoveredByIdIndex(virtualFile)) {
|
||||
if (skipIndexed && isCoveredByIdIndex(virtualFile) &&
|
||||
(fileIndex.isInContent(virtualFile) || fileIndex.isInLibraryClasses(virtualFile) || fileIndex.isInLibrarySource(virtualFile))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -259,7 +262,7 @@ class FindInProjectTask {
|
||||
}
|
||||
}
|
||||
|
||||
EnumContentIterator iterator = new EnumContentIterator();
|
||||
final EnumContentIterator iterator = new EnumContentIterator();
|
||||
|
||||
if (customScope instanceof LocalSearchScope) {
|
||||
for (VirtualFile file : getLocalScopeFiles((LocalSearchScope)customScope)) {
|
||||
@@ -267,6 +270,15 @@ class FindInProjectTask {
|
||||
}
|
||||
}
|
||||
else if (myPsiDirectory != null) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (myPsiDirectory.isValid()) {
|
||||
addFilesUnderDirectory(myPsiDirectory, iterator);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
myFileIndex.iterateContentUnderDirectory(myPsiDirectory.getVirtualFile(), iterator);
|
||||
}
|
||||
else {
|
||||
@@ -424,4 +436,17 @@ class FindInProjectTask {
|
||||
});
|
||||
}
|
||||
|
||||
private void addFilesUnderDirectory(@NotNull PsiDirectory directory, @NotNull ContentIterator iterator) {
|
||||
for (PsiElement child : directory.getChildren()) {
|
||||
if (child instanceof PsiFile) {
|
||||
VirtualFile virtualFile = ((PsiFile)child).getVirtualFile();
|
||||
if (virtualFile != null) {
|
||||
iterator.processFile(virtualFile);
|
||||
}
|
||||
}
|
||||
else if (myFindModel.isWithSubdirectories() && child instanceof PsiDirectory) {
|
||||
addFilesUnderDirectory((PsiDirectory)child, iterator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user