diff --git a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java index 584916fb02e6..deba8240f325 100644 --- a/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/find/FindManagerTest.java @@ -273,12 +273,18 @@ public class FindManagerTest extends DaemonAnalyzerTestCase { findModel.setGlobal(true); findModel.setMultipleFiles(true); final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject()); - final PsiClass baseClass = facade.findClass("A", GlobalSearchScope.allScope(getProject())); - final PsiClass implClass = facade.findClass("AImpl", GlobalSearchScope.allScope(getProject())); + final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); + final PsiClass baseClass = facade.findClass("A", scope); + final PsiClass implClass = facade.findClass("AImpl", scope); findModel.setCustomScope(new LocalSearchScope(new PsiElement[]{baseClass, implClass})); List usages = findUsages(findModel); assertEquals(2, usages.size()); + + final PsiClass aClass = facade.findClass("B", scope); + findModel.setCustomScope(new LocalSearchScope(aClass)); + + assertSize(1, findUsages(findModel)); } public void testDollars() throws Exception { diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java index db9724c0a615..f418db402f94 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java @@ -287,10 +287,17 @@ public class FindInProjectUtil { FindResult result = findManager.findString(text, offset, findModel, psiFile.getVirtualFile()); if (!result.isStringFound()) break; + final int prevOffset = offset; + offset = result.getEndOffset(); + if (prevOffset == offset) { + // for regular expr the size of the match could be zero -> could be infinite loop in finding usages! + ++offset; + } + final SearchScope customScope = findModel.getCustomScope(); if (customScope instanceof LocalSearchScope) { final TextRange range = new TextRange(result.getStartOffset(), result.getEndOffset()); - if (!((LocalSearchScope)customScope).containsRange(psiFile, range)) break; + if (!((LocalSearchScope)customScope).containsRange(psiFile, range)) continue; } UsageInfo info = new FindResultUsageInfo(findManager, psiFile, offset, findModel, result); if (!consumer.process(info)){ @@ -298,13 +305,6 @@ public class FindInProjectUtil { } count++; - final int prevOffset = offset; - offset = result.getEndOffset(); - - if (prevOffset == offset) { - // for regular expr the size of the match could be zero -> could be infinite loop in finding usages! - ++offset; - } if (maxUsages > 0 && count >= maxUsages) { break; }