mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-117362 Find/Replace in Path does not work for current file if current file isn't part of the project
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.find.impl.FindInProjectUtil;
|
||||
import com.intellij.find.replaceInProject.ReplaceInProjectManager;
|
||||
import com.intellij.lang.properties.IProperty;
|
||||
import com.intellij.lang.properties.psi.PropertiesFile;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
@@ -40,6 +41,7 @@ import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.fixtures.TempDirTestFixture;
|
||||
import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl;
|
||||
import com.intellij.testFramework.fixtures.impl.TempDirTestFixtureImpl;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usages.FindUsagesProcessPresentation;
|
||||
import com.intellij.usages.Usage;
|
||||
@@ -478,6 +480,21 @@ public class FindManagerTest extends DaemonAnalyzerTestCase {
|
||||
FindManagerTestUtils.runFindInCommentsAndLiterals(myFindManager, findModel, text);
|
||||
}
|
||||
|
||||
public void testFindInCurrentFileOutsideProject() throws Exception {
|
||||
final TempDirTestFixture tempDirFixture = new TempDirTestFixtureImpl();
|
||||
tempDirFixture.setUp();
|
||||
try {
|
||||
VirtualFile file = tempDirFixture.createFile("a.txt", "foo bar foo");
|
||||
FindModel findModel = FindManagerTestUtils.configureFindModel("foo");
|
||||
findModel.setWholeWordsOnly(true);
|
||||
findModel.setCustomScope(new LocalSearchScope(PsiManager.getInstance(myProject).findFile(file)));
|
||||
assertSize(2, findUsages(findModel));
|
||||
}
|
||||
finally {
|
||||
tempDirFixture.tearDown();
|
||||
}
|
||||
}
|
||||
|
||||
public void testFindInJavaDocs() {
|
||||
FindModel findModel = FindManagerTestUtils.configureFindModel("done");
|
||||
String text = "/** done done done */";
|
||||
|
||||
@@ -338,10 +338,11 @@ public class FindInProjectUtil {
|
||||
|
||||
if (fastWords.getFirst() && canOptimizeForFastWordSearch(findModel)) return filesForFastWordSearch;
|
||||
|
||||
final GlobalSearchScope customScope = toGlobal(project, findModel.getCustomScope());
|
||||
SearchScope customScope = findModel.getCustomScope();
|
||||
final GlobalSearchScope globalCustomScope = toGlobal(project, customScope);
|
||||
|
||||
class EnumContentIterator implements ContentIterator {
|
||||
final List<PsiFile> myFiles = new ArrayList<PsiFile>(filesForFastWordSearch);
|
||||
final Set<PsiFile> myFiles = new LinkedHashSet<PsiFile>(filesForFastWordSearch);
|
||||
final PsiManager psiManager = PsiManager.getInstance(project);
|
||||
|
||||
@Override
|
||||
@@ -349,7 +350,7 @@ public class FindInProjectUtil {
|
||||
ProgressManager.checkCanceled();
|
||||
if (!virtualFile.isDirectory() &&
|
||||
(fileMaskRegExp == null || fileMaskRegExp.matcher(virtualFile.getName()).matches()) &&
|
||||
(customScope == null || customScope.contains(virtualFile))) {
|
||||
(globalCustomScope == null || globalCustomScope.contains(virtualFile))) {
|
||||
final PsiFile psiFile = psiManager.findFile(virtualFile);
|
||||
if (psiFile != null && !filesForFastWordSearch.contains(psiFile)) {
|
||||
myFiles.add(psiFile);
|
||||
@@ -363,14 +364,19 @@ public class FindInProjectUtil {
|
||||
return myFiles;
|
||||
}
|
||||
}
|
||||
|
||||
EnumContentIterator iterator = new EnumContentIterator();
|
||||
|
||||
for (VirtualFile file : getLocalScopeFiles((LocalSearchScope)customScope)) {
|
||||
iterator.processFile(file);
|
||||
}
|
||||
|
||||
if (psiDirectory == null) {
|
||||
boolean success = fileIndex.iterateContent(iterator);
|
||||
if (success && customScope != null && customScope.isSearchInLibraries()) {
|
||||
if (success && globalCustomScope != null && globalCustomScope.isSearchInLibraries()) {
|
||||
OrderEnumerator enumerator = module == null ? OrderEnumerator.orderEntries(project) : OrderEnumerator.orderEntries(module);
|
||||
final VirtualFile[] librarySources = enumerator.withoutModuleSourceEntries().withoutDepModules().getSourceRoots();
|
||||
iterateAll(librarySources, customScope, iterator);
|
||||
iterateAll(librarySources, globalCustomScope, iterator);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -406,6 +412,10 @@ public class FindInProjectUtil {
|
||||
if (scope instanceof GlobalSearchScope || scope == null) {
|
||||
return (GlobalSearchScope)scope;
|
||||
}
|
||||
return GlobalSearchScope.filesScope(project, getLocalScopeFiles((LocalSearchScope)scope));
|
||||
}
|
||||
|
||||
private static Set<VirtualFile> getLocalScopeFiles(LocalSearchScope scope) {
|
||||
Set<VirtualFile> files = new HashSet<VirtualFile>();
|
||||
for (PsiElement element : ((LocalSearchScope)scope).getScope()) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
@@ -413,7 +423,7 @@ public class FindInProjectUtil {
|
||||
ContainerUtil.addIfNotNull(files, file.getVirtualFile());
|
||||
}
|
||||
}
|
||||
return GlobalSearchScope.filesScope(project, files);
|
||||
return files;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user