diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java index b7a4dd19cf59..580d6582d01e 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java @@ -11,8 +11,15 @@ import groovy.lang.GroovyRuntimeException; import groovy.lang.GroovyShell; import groovy.lang.Script; import org.codehaus.groovy.control.CompilationFailedException; +import org.codehaus.groovy.control.ErrorCollector; +import org.codehaus.groovy.control.MultipleCompilationErrorsException; +import org.codehaus.groovy.control.messages.Message; +import org.codehaus.groovy.control.messages.SyntaxErrorMessage; +import org.codehaus.groovy.syntax.SyntaxException; import java.io.File; +import java.io.IOException; +import java.util.List; /** * @author Maxim.Mossienko @@ -58,10 +65,25 @@ public class ScriptSupport { } } - public static String checkValidScript(String script) { + public static String checkValidScript(String scriptText) { try { - final Object o = new GroovyShell().parse(script); + final File scriptFile = new File(scriptText); + final GroovyShell shell = new GroovyShell(); + final Script script = scriptFile.exists() ? shell.parse(scriptFile) : shell.parse(scriptText); return null; + } catch (IOException e) { + return e.getMessage(); + } catch (MultipleCompilationErrorsException e) { + final ErrorCollector errorCollector = e.getErrorCollector(); + final List errors = errorCollector.getErrors(); + for (Message error : errors) { + if (error instanceof SyntaxErrorMessage) { + final SyntaxErrorMessage errorMessage = (SyntaxErrorMessage)error; + final SyntaxException cause = errorMessage.getCause(); + return cause.getMessage(); + } + } + return e.getMessage(); } catch (CompilationFailedException ex) { return ex.getLocalizedMessage(); } diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/EditVarConstraintsDialog.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/EditVarConstraintsDialog.java index 6c37f9883835..368240ff50be 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/EditVarConstraintsDialog.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/EditVarConstraintsDialog.java @@ -467,10 +467,10 @@ class EditVarConstraintsDialog extends DialogWrapper { final String text = field.getText(); if (text.length() > 0) { - final String s = ScriptSupport.checkValidScript(text); + final String message = ScriptSupport.checkValidScript(text); - if (s != null) { - Messages.showErrorDialog(SSRBundle.message("invalid.groovy.script"), SSRBundle.message("invalid.groovy.script")); + if (message != null) { + Messages.showErrorDialog(message, SSRBundle.message("invalid.groovy.script")); field.requestFocus(); return false; }