From 3e7a0aaef80d04e13b700cce98c80f258abba838 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 29 Apr 2016 16:31:18 +0200 Subject: [PATCH] SSR: no duplicate results when searching for symbols --- .../impl/matcher/handlers/SymbolHandler.java | 5 ++--- .../intellij/structuralsearch/StructuralSearchTest.java | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) 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() {