diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaMatchingVisitor.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaMatchingVisitor.java index 66680879b62e..e430c1ac1991 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaMatchingVisitor.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaMatchingVisitor.java @@ -1090,23 +1090,21 @@ public class JavaMatchingVisitor extends JavaElementVisitor { public void visitLiteralExpression(final PsiLiteralExpression const1) { final PsiLiteralExpression const2 = getExpression(PsiLiteralExpression.class); if (const2 == null) return; + final PsiType type1 = const1.getType(); + if (type1 != null && !myMatchingVisitor.setResult(type1.equals(const2.getType()))) { + return; + } final MatchingHandler handler = (MatchingHandler)const1.getUserData(CompiledPattern.HANDLER_KEY); if (handler instanceof SubstitutionHandler) { - final PsiType type1 = const1.getType(); - if (type1 != null && !type1.equals(const2.getType())) { - myMatchingVisitor.setResult(false); - } - else { - int offset = 0; - int length = const2.getTextLength(); - final String text = const2.getText(); + int offset = 0; + int length = const2.getTextLength(); + final String text = const2.getText(); - if (StringUtil.isQuotedString(text)) { - length--; - offset++; - } - myMatchingVisitor.setResult(((SubstitutionHandler)handler).handle(const2, offset, length, myMatchingVisitor.getMatchContext())); + if (StringUtil.isQuotedString(text)) { + length--; + offset++; } + myMatchingVisitor.setResult(((SubstitutionHandler)handler).handle(const2, offset, length, myMatchingVisitor.getMatchContext())); } else if (handler != null) { myMatchingVisitor.setResult(handler.match(const1, const2, myMatchingVisitor.getMatchContext())); diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java index d7214e4d1130..82e86d291cfa 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java @@ -282,6 +282,7 @@ public class StructuralSearchTest extends StructuralSearchTestCase { "}"; assertEquals("match literal by value", 1, findMatchesCount(s3, "32")); assertEquals("match char with substitution", 3, findMatchesCount(s3, "\\''_x\\'")); + assertEquals("string literal should not match char", 0, findMatchesCount(s3, "\"a\"")); } public void testCovariantArraySearch() {