< prev index next >

src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/NashornCompleter.java

Print this page

        

@@ -23,14 +23,17 @@
  * questions.
  */
 
 package jdk.nashorn.tools.jjs;
 
+import java.io.File;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Pattern;
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileNameExtensionFilter;
 import jdk.internal.jline.console.completer.Completer;
 import jdk.internal.jline.console.UserInterruptException;
 import jdk.nashorn.api.tree.AssignmentTree;
 import jdk.nashorn.api.tree.BinaryTree;
 import jdk.nashorn.api.tree.CompilationUnitTree;

@@ -65,10 +68,11 @@
     private final Global global;
     private final ScriptEnvironment env;
     private final PartialParser partialParser;
     private final PropertiesHelper propsHelper;
     private final Parser parser;
+    private static final boolean BACKSLASH_FILE_SEPARATOR = File.separatorChar == '\\';
 
     NashornCompleter(final Context context, final Global global,
             final PartialParser partialParser, final PropertiesHelper propsHelper) {
         this.context = context;
         this.global = global;

@@ -180,10 +184,13 @@
 
     // Pattern to match a unfinished member selection expression. object part and "."
     // but property name missing pattern.
     private static final Pattern SELECT_PROP_MISSING = Pattern.compile(".*\\.\\s*");
 
+    // Pattern to match load call
+    private static final Pattern LOAD_CALL = Pattern.compile("\\s*load\\s*\\(\\s*");
+
     @Override
     public int complete(final String test, final int cursor, final List<CharSequence> result) {
         // check that cursor is at the end of test string. Do not complete in the middle!
         if (cursor != test.length()) {
             return cursor;

@@ -208,10 +215,27 @@
         // Make it legal by adding a random property name "x" to it.
         final String completeExpr = endsWithDot? exprStr + "x" : exprStr;
 
         final ExpressionTree topExpr = getTopLevelExpression(parser, completeExpr);
         if (topExpr == null) {
+            // special case for load call that looks like "load(" with optional whitespaces
+            if (LOAD_CALL.matcher(test).matches()) {
+                // throw a file dialog box
+                final JFileChooser chooser = new JFileChooser();
+                chooser.setFileFilter(new FileNameExtensionFilter("JavaScript Files", "js"));
+                int retVal = chooser.showOpenDialog(null);
+                if (retVal == JFileChooser.APPROVE_OPTION) {
+                    String name = chooser.getSelectedFile().getAbsolutePath();
+                    // handle '\' file separator
+                    if (BACKSLASH_FILE_SEPARATOR) {
+                        name = name.replace("\\", "\\\\");
+                    }
+                    result.add("\"" + name + "\")");
+                    return cursor + name.length() + 3;
+                }
+            }
+
             // did not parse to be a top level expression, no suggestions!
             return cursor;
         }
 
 
< prev index next >