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);