langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java
changeset 41248 2a3e74c5ad8a
parent 40767 c7908e8c786b
child 41514 a75c2b869d8d
equal deleted inserted replaced
41247:002eb49496ca 41248:2a3e74c5ad8a
   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);
   583 
   589 
   584         if (options.has("help")) {
   590         if (options.has("help")) {
   585             printUsage();
   591             printUsage();
   586             return null;
   592             return null;
   587         }
   593         }
       
   594         if (options.has("X")) {
       
   595             printUsageX();
       
   596             return null;
       
   597         }
   588         if (options.has("version")) {
   598         if (options.has("version")) {
   589             cmdout.printf("jshell %s\n", version());
   599             cmdout.printf("jshell %s\n", version());
   590             return null;
   600             return null;
   591         }
   601         }
   592         if (options.has("full-version")) {
   602         if (options.has("full-version")) {
   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;