diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/handlers/SymbolHandler.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/handlers/SymbolHandler.java index 4d1f9a852940..a366a00d24f2 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/handlers/SymbolHandler.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/handlers/SymbolHandler.java @@ -13,9 +13,8 @@ public class SymbolHandler extends MatchingHandler { this.handler = handler; } + @Override public boolean match(PsiElement patternNode, PsiElement matchedNode, MatchContext context) { - // there is no need to do filtering since this is delegate of Substituion handler - - return handler.handle(matchedNode,context); + return handler.canMatch(patternNode, matchedNode) && handler.handle(matchedNode, context); } } diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java index c7f68b7a5eec..bd83763792df 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java @@ -1398,6 +1398,15 @@ public class StructuralSearchTest extends StructuralSearchTestCase { final String pattern2 = "'_:[write && regex( i )]"; assertEquals("Find writes of symbol", 3, findMatchesCount(in, pattern2)); + + final String source = "class A {" + + " static A a() {};" + + " void m() {" + + " A a = A.a();" + + " }" + + "}"; + final String pattern3 = "A"; + assertEquals("No duplicate results", 4, findMatchesCount(source, pattern3)); } public void testSearchGenerics() {