197 private boolean regenerateOnDeath = true; |
197 private boolean regenerateOnDeath = true; |
198 private boolean live = false; |
198 private boolean live = false; |
199 private boolean feedbackInitialized = false; |
199 private boolean feedbackInitialized = false; |
200 private String commandLineFeedbackMode = null; |
200 private String commandLineFeedbackMode = null; |
201 private List<String> remoteVMOptions = new ArrayList<>(); |
201 private List<String> remoteVMOptions = new ArrayList<>(); |
|
202 private List<String> compilerOptions = new ArrayList<>(); |
202 |
203 |
203 SourceCodeAnalysis analysis; |
204 SourceCodeAnalysis analysis; |
204 JShell state = null; |
205 JShell state = null; |
205 Subscription shutdownSubscription = null; |
206 Subscription shutdownSubscription = null; |
206 |
207 |
556 OptionSpec<String> fb = parser.accepts("feedback").withRequiredArg(); |
557 OptionSpec<String> fb = parser.accepts("feedback").withRequiredArg(); |
557 parser.accepts("q"); |
558 parser.accepts("q"); |
558 parser.accepts("s"); |
559 parser.accepts("s"); |
559 parser.accepts("v"); |
560 parser.accepts("v"); |
560 OptionSpec<String> r = parser.accepts("R").withRequiredArg(); |
561 OptionSpec<String> r = parser.accepts("R").withRequiredArg(); |
|
562 OptionSpec<String> c = parser.accepts("C").withRequiredArg(); |
561 parser.acceptsAll(asList("h", "help")); |
563 parser.acceptsAll(asList("h", "help")); |
562 parser.accepts("version"); |
564 parser.accepts("version"); |
563 parser.accepts("full-version"); |
565 parser.accepts("full-version"); |
|
566 |
|
567 parser.accepts("X"); |
|
568 OptionSpec<String> addExports = parser.accepts("add-exports").withRequiredArg(); |
|
569 |
564 NonOptionArgumentSpec<String> loadFileSpec = parser.nonOptions(); |
570 NonOptionArgumentSpec<String> loadFileSpec = parser.nonOptions(); |
565 |
571 |
566 OptionSet options; |
572 OptionSet options; |
567 try { |
573 try { |
568 options = parser.parse(args); |
574 options = parser.parse(args); |
628 commandLineFeedbackMode = "silent"; |
638 commandLineFeedbackMode = "silent"; |
629 } else if (options.has("v")) { |
639 } else if (options.has("v")) { |
630 commandLineFeedbackMode = "verbose"; |
640 commandLineFeedbackMode = "verbose"; |
631 } |
641 } |
632 if (options.has(r)) { |
642 if (options.has(r)) { |
633 remoteVMOptions = options.valuesOf(r); |
643 remoteVMOptions.addAll(options.valuesOf(r)); |
|
644 } |
|
645 if (options.has(c)) { |
|
646 compilerOptions.addAll(options.valuesOf(c)); |
|
647 } |
|
648 |
|
649 if (options.has(addExports)) { |
|
650 List<String> exports = options.valuesOf(addExports).stream() |
|
651 .map(mp -> mp + "=ALL-UNNAMED") |
|
652 .flatMap(mp -> Stream.of("--add-exports", mp)) |
|
653 .collect(toList()); |
|
654 remoteVMOptions.addAll(exports); |
|
655 compilerOptions.addAll(exports); |
634 } |
656 } |
635 |
657 |
636 return options.valuesOf(loadFileSpec); |
658 return options.valuesOf(loadFileSpec); |
637 } |
659 } |
638 |
660 |
639 private void printUsage() { |
661 private void printUsage() { |
640 cmdout.print(getResourceString("help.usage")); |
662 cmdout.print(getResourceString("help.usage")); |
|
663 } |
|
664 |
|
665 private void printUsageX() { |
|
666 cmdout.print(getResourceString("help.usage.x")); |
641 } |
667 } |
642 |
668 |
643 /** |
669 /** |
644 * Message handler to use during initial start-up. |
670 * Message handler to use during initial start-up. |
645 */ |
671 */ |
681 .err(usererr) |
707 .err(usererr) |
682 .tempVariableNameGenerator(()-> "$" + currentNameSpace.tidNext()) |
708 .tempVariableNameGenerator(()-> "$" + currentNameSpace.tidNext()) |
683 .idGenerator((sn, i) -> (currentNameSpace == startNamespace || state.status(sn).isActive()) |
709 .idGenerator((sn, i) -> (currentNameSpace == startNamespace || state.status(sn).isActive()) |
684 ? currentNameSpace.tid(sn) |
710 ? currentNameSpace.tid(sn) |
685 : errorNamespace.tid(sn)) |
711 : errorNamespace.tid(sn)) |
686 .remoteVMOptions(remoteVMOptions.toArray(new String[remoteVMOptions.size()])) |
712 .remoteVMOptions(remoteVMOptions.stream().toArray(String[]::new)) |
|
713 .compilerOptions(compilerOptions.stream().toArray(String[]::new)) |
687 .build(); |
714 .build(); |
688 shutdownSubscription = state.onShutdown((JShell deadState) -> { |
715 shutdownSubscription = state.onShutdown((JShell deadState) -> { |
689 if (deadState == state) { |
716 if (deadState == state) { |
690 hardmsg("jshell.msg.terminated"); |
717 hardmsg("jshell.msg.terminated"); |
691 live = false; |
718 live = false; |