From d9a5f3609d7d7b670d21860ebad6e23de22ea39a Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 11 Jan 2021 12:24:05 +0100 Subject: [PATCH] SSR: fix exception on invalid search template (IDEA-259106) GitOrigin-RevId: 2baa413344e36389a2614407417f18f8a913f765 --- .../impl/matcher/handlers/StatementHandler.java | 8 ++++---- .../structuralsearch/StructuralSearchTest.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java index 948676f49fc3..cb11fd74cda8 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java @@ -1,13 +1,10 @@ -// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.structuralsearch.impl.matcher.handlers; import com.intellij.psi.*; import com.intellij.structuralsearch.impl.matcher.MatchContext; import org.jetbrains.annotations.NotNull; -/** - * Handler for statement search - */ public class StatementHandler extends MatchingHandler { @Override @@ -16,6 +13,9 @@ public class StatementHandler extends MatchingHandler { // typed statement matches statements (including block statements) and comments return false; } + if (!(patternNode instanceof PsiExpressionStatement)) { + return false; + } final PsiExpression expression = ((PsiExpressionStatement)patternNode).getExpression(); return context.getMatcher().match(expression, matchedNode); diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java index 5a0c0d8f63ac..340723bb89b6 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java @@ -2591,6 +2591,16 @@ public class StructuralSearchTest extends StructuralSearchTestCase { "}"; assertEquals("don't throw exception during matching", 0, findMatchesCount(s, "void '_Method('_ParameterType '_Parameter*, '_LastType[] '_lastParameter);")); + + String s2 = "class X {" + + " void x() {" + + " x();" + + " }" + + "}"; + assertEquals("don't throw exception during matching", 0, + findMatchesCount(s2, "void '_x() {\n" + + " '_x;\n" + + "}")); } public void testNoUnexpectedException() {