IDEA-176395 "Find in Path" search limit no longer context dependant

This commit is contained in:
Vassiliy.Kudryashov
2017-07-25 13:35:45 +03:00
parent 34871f4479
commit 6011cdb036
2 changed files with 48 additions and 5 deletions
@@ -23,6 +23,8 @@ import com.intellij.find.impl.FindResultImpl;
import com.intellij.find.replaceInProject.ReplaceInProjectManager;
import com.intellij.lang.properties.IProperty;
import com.intellij.lang.properties.psi.PropertiesFile;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.ex.PathManagerEx;
@@ -31,10 +33,13 @@ import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressManager;
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.util.Condition;
import com.intellij.openapi.util.ProperTextRange;
@@ -49,14 +54,12 @@ import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScopesCore;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.scope.packageSet.NamedScope;
import com.intellij.psi.search.scope.packageSet.PackageSet;
import com.intellij.psi.search.scope.packageSet.PackageSetFactory;
import com.intellij.psi.search.scope.packageSet.ParsingException;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.*;
import com.intellij.testFramework.fixtures.TempDirTestFixture;
import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl;
import com.intellij.testFramework.fixtures.impl.TempDirTestFixtureImpl;
@@ -1041,4 +1044,41 @@ public class FindManagerTest extends DaemonAnalyzerTestCase {
assertTrue(FindUtil.replace(myProject, myEditor, 0, model));
assertEquals(expectedResult, myEditor.getDocument().getText());
}
public void testDataContextProcessing() {
initProject("findInPath", "src");
VirtualFile directory = mySourceDirs[0].findFileByRelativePath("x");
VirtualFile file = directory.findChild("dd.properties");
assertNotNull(file);
SearchScope scope = GlobalSearchScope.filesScope(myProject, ContainerUtil.list(directory));
Module module = ModuleManager.getInstance(myProject).getModules()[0];
String moduleName = module.getName();
String dirName = directory.getPresentableUrl();
FindModel model = new FindModel();
model.setDirectoryName("initialDirectoryName");
model.setModuleName("initialModuleName");
model.setProjectScope(false);
model.setCustomScopeName("initialScopeName");
checkContext(model, myProject, directory, module, false, null, moduleName, false);
checkContext(model, myProject, directory, null, false, dirName, moduleName, false);//prev module state
checkContext(model, myProject, null, null, true, dirName, moduleName, false);//prev module and dir state
model.setCustomScope(scope);
model.setCustomScope(true);
checkContext(model, myProject, null, null, false, dirName, moduleName, true);//prev module and dir state
}
private static void checkContext(FindModel model, Project project, VirtualFile directory, Module module,
boolean shouldBeProjectScope, String expectedDirectoryName, String expectedModuleName, boolean shouldBeCustomScope) {
MapDataContext dataContext = new MapDataContext();
dataContext.put(CommonDataKeys.PROJECT, project);
dataContext.put(CommonDataKeys.VIRTUAL_FILE, directory);
dataContext.put(LangDataKeys.MODULE_CONTEXT, module);
FindInProjectUtil.setDirectoryName(model, dataContext);
assertEquals(shouldBeProjectScope, model.isProjectScope());
assertEquals(expectedDirectoryName, model.getDirectoryName());
assertEquals(expectedModuleName, model.getModuleName());
assertEquals(shouldBeCustomScope, model.isCustomScope());
}
}
@@ -113,6 +113,9 @@ public class FindInProjectUtil {
// apply explicit settings from context
if (module != null) {
model.setModuleName(module.getName());
directoryName = null;// Explicit 'module' scope is more specific than 'module directory' scope
model.setCustomScope(false);
model.setDirectoryName(null);
}
Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
@@ -124,7 +127,7 @@ public class FindInProjectUtil {
}
// set project scope if we have no other settings
model.setProjectScope(model.getDirectoryName() == null && model.getModuleName() == null && !model.isCustomScope());
model.setProjectScope(directoryName == null && module == null && !model.isCustomScope());
}
/**