src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java

Print this page

        

*** 92,107 **** --- 92,111 ---- import java.util.Optional; import java.util.ResourceBundle; import java.util.Spliterators; import java.util.function.Function; import java.util.function.Supplier; + import jdk.internal.joptsimple.*; import jdk.internal.jshell.tool.Feedback.FormatAction; import jdk.internal.jshell.tool.Feedback.FormatCase; import jdk.internal.jshell.tool.Feedback.FormatErrors; import jdk.internal.jshell.tool.Feedback.FormatResolve; import jdk.internal.jshell.tool.Feedback.FormatUnresolved; import jdk.internal.jshell.tool.Feedback.FormatWhen; + import static java.util.Arrays.asList; + import static java.util.Arrays.stream; + import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; import static jdk.jshell.Snippet.SubKind.VAR_VALUE_SUBKIND; import static java.util.stream.Collectors.toMap; import static jdk.internal.jshell.debug.InternalDebugControl.DBG_COMPA; import static jdk.internal.jshell.debug.InternalDebugControl.DBG_DEP;
*** 513,598 **** * Set options. * @param args the command line arguments * @return the list of files to be loaded */ private List<String> processCommandArgs(String[] args) { ! List<String> loadList = new ArrayList<>(); ! Iterator<String> ai = Arrays.asList(args).iterator(); ! while (ai.hasNext()) { ! String arg = ai.next(); ! if (arg.startsWith("-")) { ! switch (arg) { ! case "-classpath": ! case "-cp": ! if (cmdlineClasspath != null) { ! startmsg("jshell.err.opt.classpath.conflict"); ! return null; ! } ! if (ai.hasNext()) { ! cmdlineClasspath = ai.next(); } else { ! startmsg("jshell.err.opt.classpath.arg"); return null; } ! break; ! case "-help": printUsage(); return null; ! case "-version": cmdout.printf("jshell %s\n", version()); return null; ! case "-fullversion": cmdout.printf("jshell %s\n", fullVersion()); return null; ! case "-feedback": ! if (ai.hasNext()) { ! commandLineFeedbackMode = ai.next(); ! } else { ! startmsg("jshell.err.opt.feedback.arg"); return null; } ! break; ! case "-q": ! commandLineFeedbackMode = "concise"; ! break; ! case "-qq": ! commandLineFeedbackMode = "silent"; ! break; ! case "-v": ! commandLineFeedbackMode = "verbose"; ! break; ! case "-startup": ! if (startup != null) { startmsg("jshell.err.opt.startup.one"); return null; } ! startup = readFile(ai.hasNext()? ai.next() : null, "-startup"); if (startup == null) { return null; } - break; - case "-nostartup": - if (startup != null) { - startmsg("jshell.err.opt.startup.one"); - return null; } startup = ""; - break; - default: - if (arg.startsWith("-R")) { - remoteVMOptions.add(arg.substring(2)); - break; } ! startmsg("jshell.err.opt.unknown", arg); ! printUsage(); return null; } ! } else { ! loadList.add(arg); } } ! return loadList; } private void printUsage() { cmdout.print(getResourceString("help.usage")); } --- 517,614 ---- * Set options. * @param args the command line arguments * @return the list of files to be loaded */ private List<String> processCommandArgs(String[] args) { ! OptionParser parser = new OptionParser(); ! OptionSpec<String> cp = parser.accepts("class-path").withRequiredArg(); ! OptionSpec<String> st = parser.accepts("startup").withRequiredArg(); ! parser.acceptsAll(asList("n", "no-startup")); ! OptionSpec<String> fb = parser.accepts("feedback").withRequiredArg(); ! parser.accepts("q"); ! parser.accepts("s"); ! parser.accepts("v"); ! OptionSpec<String> r = parser.accepts("R").withRequiredArg(); ! parser.acceptsAll(asList("h", "help")); ! parser.accepts("version"); ! parser.accepts("full-version"); ! NonOptionArgumentSpec<String> loadFileSpec = parser.nonOptions(); ! ! OptionSet options; ! try { ! options = parser.parse(args); ! } catch (OptionException ex) { ! if (ex.options().isEmpty()) { ! startmsg("jshell.err.opt.invalid", stream(args).collect(joining(", "))); } else { ! boolean isKnown = parser.recognizedOptions().containsKey(ex.options().iterator().next()); ! startmsg(isKnown ! ? "jshell.err.opt.arg" ! : "jshell.err.opt.unknown", ! ex.options() ! .stream() ! .collect(joining(", "))); ! } return null; } ! ! if (options.has("help")) { printUsage(); return null; ! } ! if (options.has("version")) { cmdout.printf("jshell %s\n", version()); return null; ! } ! if (options.has("full-version")) { cmdout.printf("jshell %s\n", fullVersion()); return null; ! } ! if (options.has(cp)) { ! List<String> cps = options.valuesOf(cp); ! if (cps.size() > 1) { ! startmsg("jshell.err.opt.one", "--class-path"); return null; } ! cmdlineClasspath = cps.get(0); ! } ! if (options.has(st)) { ! List<String> sts = options.valuesOf(st); ! if (sts.size() != 1 || options.has("no-startup")) { startmsg("jshell.err.opt.startup.one"); return null; } ! startup = readFile(sts.get(0), "--startup"); if (startup == null) { return null; } } + if (options.has("no-startup")) { startup = ""; } ! if (options.has(fb)) { ! List<String> fbs = options.valuesOf(fb); ! if (fbs.size() != 1) { ! startmsg("jshell.err.opt.one", "--feedback"); return null; } ! commandLineFeedbackMode = fbs.get(0); } + if (options.has("q")) { + commandLineFeedbackMode = "concise"; } ! if (options.has("s")) { ! commandLineFeedbackMode = "silent"; ! } ! if (options.has("v")) { ! commandLineFeedbackMode = "verbose"; ! } ! if (options.has(r)) { ! remoteVMOptions = options.valuesOf(r); ! } ! ! return options.valuesOf(loadFileSpec); } private void printUsage() { cmdout.print(getResourceString("help.usage")); }
*** 684,694 **** prefs.remove(MODE_KEY); } } if (commandLineFeedbackMode != null) { // The feedback mode to use was specified on the command line, use it ! if (!feedback.setFeedback(initmh, new ArgTokenizer("-feedback", commandLineFeedbackMode))) { regenerateOnDeath = false; } commandLineFeedbackMode = null; } else { String fb = prefs.get(FEEDBACK_KEY, null); --- 700,710 ---- prefs.remove(MODE_KEY); } } if (commandLineFeedbackMode != null) { // The feedback mode to use was specified on the command line, use it ! if (!feedback.setFeedback(initmh, new ArgTokenizer("--feedback", commandLineFeedbackMode))) { regenerateOnDeath = false; } commandLineFeedbackMode = null; } else { String fb = prefs.get(FEEDBACK_KEY, null);