From 560d79c5377ddd8c35b13a4209d24cdc5935feeb Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 5 Mar 2018 15:57:03 +0100 Subject: [PATCH] SSR: catch runtime exceptions from Groovy shell (IDEA-187725) --- .../impl/matcher/predicates/ScriptSupport.java | 3 +-- .../structuralsearch/StructuralSearchTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java index 273a84ba4b02..60d0b8e07523 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java @@ -11,7 +11,6 @@ import com.intellij.structuralsearch.StructuralSearchException; import com.intellij.structuralsearch.StructuralSearchUtil; import com.intellij.structuralsearch.plugin.ui.Configuration; import groovy.lang.Binding; -import groovy.lang.GroovyRuntimeException; import groovy.lang.GroovyShell; import groovy.lang.Script; import org.codehaus.groovy.control.CompilationFailedException; @@ -105,7 +104,7 @@ public class ScriptSupport { final Object o = script.run(); return String.valueOf(o); - } catch (GroovyRuntimeException ex) { + } catch (RuntimeException ex) { throw new StructuralSearchException(SSRBundle.message("groovy.script.error", StringUtil.replace(ex.getMessage(), UUID, ""))); } finally { script.setBinding(null); diff --git a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java index 895e1ff420ac..d09b6722f03f 100644 --- a/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java +++ b/platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java @@ -905,6 +905,16 @@ public class StructuralSearchTest extends StructuralSearchTestCase { "import static com.intellij.psi.util.PsiUtil.*\n" + "Symbol instanceof PsiExpression && isAccessedForWriting(Symbol) ||\n" + " Symbol instanceof PsiVariable && Symbol.getInitializer() != null\")]")); + + try { + findMatchesCount(in, "[script( com.intellij.psi.PsiField field = __context__; true; )]" + + "int i;"); + fail("Catch RuntimeExceptions from Groovy runtime"); + } catch (StructuralSearchException ignore) { + } catch (Throwable t) { + fail("Catch RuntimeExceptions from Groovy runtime"); + } + } public void testCheckScriptValidation() {