Merge pull request #614 from tkruse/groovy-7290

GROOVY-7290: Groovysh: More robust and eager-failing command detection
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
index 2a1d508..87619a7 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
@@ -69,16 +69,18 @@
         //       then ask the registry for the command for a given line?
         //
 
-        List<String> args = CommandArgumentParser.parseLine(line, parsedArgs == null ? 1 : -1)
+        // command id is first word, unless empty
+        Command command = null;
+        List<String> linetokens = line.trim().tokenize()
+        assert linetokens.size() > 0
 
-        assert args.size() > 0
-
-        Command command = registry.find(args[0])
-
-        if (command != null && args.size() > 1 && parsedArgs != null) {
-            parsedArgs.addAll(args[1..-1])
+        if (linetokens[0].length() > 0) {
+            command = registry.find(linetokens[0])
+            if (command != null && linetokens.size() > 1 && parsedArgs != null) {
+                List<String> args = CommandArgumentParser.parseLine(line, parsedArgs == null ? 1 : -1)
+                parsedArgs.addAll(args[1..-1])
+            }
         }
-
         return command
     }