From e3163230b0e1fbfdfcdf63f21fabea7821fc5a1f Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 20 Mar 2017 14:40:47 +0100 Subject: [PATCH] add a registry option for Find in Path to drill into excluded dirs (IDEA-169299) --- .../intellij/find/impl/FindManagerTest.java | 6 ++++ .../intellij/find/impl/FindInProjectTask.java | 2 +- .../util/resources/misc/registry.properties | 3 ++ .../openapi/util/registry/RegistryValue.java | 33 +++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/find/impl/FindManagerTest.java b/java/java-tests/testSrc/com/intellij/find/impl/FindManagerTest.java index a1b7b86864a2..6199ffe1def7 100644 --- a/java/java-tests/testSrc/com/intellij/find/impl/FindManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/find/impl/FindManagerTest.java @@ -38,6 +38,7 @@ 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.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; @@ -711,6 +712,11 @@ public class FindManagerTest extends DaemonAnalyzerTestCase { findModel.setProjectScope(false); findModel.setDirectoryName(excluded.getPath()); assertSize(2, findUsages(findModel)); + + findModel.setDirectoryName(root.getPath()); + assertSize(0, findUsages(findModel)); + Registry.get("find.search.in.excluded.dirs").setValue(true, getTestRootDisposable()); + assertSize(2, findUsages(findModel)); } public void testFindInJavaDocs() { diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java index ebcb18b6459f..7d4405825af3 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectTask.java @@ -317,7 +317,7 @@ class FindInProjectTask { } } else if (myDirectory != null) { - final boolean checkExcluded = !ProjectFileIndex.SERVICE.getInstance(myProject).isExcluded(myDirectory); + boolean checkExcluded = !ProjectFileIndex.SERVICE.getInstance(myProject).isExcluded(myDirectory) && !Registry.is("find.search.in.excluded.dirs"); VirtualFileVisitor.Option limit = VirtualFileVisitor.limit(myFindModel.isWithSubdirectories() ? -1 : 1); VfsUtilCore.visitChildrenRecursively(myDirectory, new VirtualFileVisitor(limit) { @Override diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index d0edff6c51b2..1d408d94750d 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -347,6 +347,9 @@ ide.suggest.file.when.creating.filename.like.directory.description=When creating find.search.in.project.files=true find.search.in.project.files.description=Whether Find in Path searches in .idea, *.ipr, *.iml, *.iws files +find.search.in.excluded.dirs=false +find.search.in.excluded.dirs.description=Whether Find in Path searches in excluded subdirectories of the scope directory + structureView.coalesceTime=500 keymap.show.alias.actions=false diff --git a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java index 4fdbd491260b..dc9bba49642a 100644 --- a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java +++ b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java @@ -207,6 +207,39 @@ public class RegistryValue { myChangedSinceStart = true; } + public void setValue(boolean value, Disposable parentDisposable) { + final boolean prev = asBoolean(); + setValue(value); + Disposer.register(parentDisposable, new Disposable() { + @Override + public void dispose() { + setValue(prev); + } + }); + } + + public void setValue(int value, Disposable parentDisposable) { + final int prev = asInteger(); + setValue(value); + Disposer.register(parentDisposable, new Disposable() { + @Override + public void dispose() { + setValue(prev); + } + }); + } + + public void setValue(String value, Disposable parentDisposable) { + final String prev = asString(); + setValue(value); + Disposer.register(parentDisposable, new Disposable() { + @Override + public void dispose() { + setValue(prev); + } + }); + } + boolean isChangedSinceAppStart() { return myChangedSinceStart; }