< prev index next >

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

Print this page

        

*** 23,36 **** --- 23,39 ---- * 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,74 **** --- 68,78 ---- 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,189 **** --- 184,196 ---- // 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,217 **** --- 215,241 ---- // 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 >