< prev index next >

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

Print this page




  23  * questions.
  24  */
  25 
  26 package jdk.internal.jshell.tool;
  27 
  28 import java.io.BufferedReader;
  29 import java.io.BufferedWriter;
  30 import java.io.EOFException;
  31 import java.io.File;
  32 import java.io.FileNotFoundException;
  33 import java.io.FileReader;
  34 import java.io.IOException;
  35 import java.io.InputStream;
  36 import java.io.InputStreamReader;
  37 import java.io.PrintStream;
  38 import java.io.Reader;
  39 import java.io.StringReader;
  40 import java.lang.module.ModuleDescriptor;
  41 import java.lang.module.ModuleFinder;
  42 import java.lang.module.ModuleReference;





  43 import java.nio.charset.Charset;
  44 import java.nio.file.FileSystems;
  45 import java.nio.file.Files;
  46 import java.nio.file.InvalidPathException;
  47 import java.nio.file.Path;
  48 import java.nio.file.Paths;
  49 import java.text.MessageFormat;
  50 import java.util.ArrayList;
  51 import java.util.Arrays;
  52 import java.util.Collection;
  53 import java.util.Collections;
  54 import java.util.HashMap;
  55 import java.util.HashSet;
  56 import java.util.Iterator;
  57 import java.util.LinkedHashMap;
  58 import java.util.LinkedHashSet;
  59 import java.util.List;
  60 import java.util.Locale;
  61 import java.util.Map;
  62 import java.util.Map.Entry;


2951         }
2952         Stream<Snippet> stream = argsOptionsToSnippets(state::snippets,
2953                 this::mainActive, arg, "/list");
2954         if (stream == null) {
2955             return false;
2956         }
2957 
2958         // prevent double newline on empty list
2959         boolean[] hasOutput = new boolean[1];
2960         stream.forEachOrdered(sn -> {
2961             if (!hasOutput[0]) {
2962                 cmdout.println();
2963                 hasOutput[0] = true;
2964             }
2965             cmdout.printf("%4s : %s\n", sn.id(), sn.source().replace("\n", "\n       "));
2966         });
2967         return true;
2968     }
2969 
2970     private boolean cmdOpen(String filename) {



2971         return runFile(filename, "/open");






















2972     }
2973 
2974     private boolean runFile(String filename, String context) {
2975         if (!filename.isEmpty()) {
2976             try {
2977                 Scanner scanner;
2978                 if (!interactiveModeBegun && filename.equals("-")) {
2979                     // - on command line: no interactive later, read from input
2980                     regenerateOnDeath = false;
2981                     scanner = new Scanner(cmdin);
2982                 } else {
2983                     Path path = toPathResolvingUserHome(filename);
2984                     String resource;
2985                     scanner = new Scanner(
2986                             (!Files.exists(path) && (resource = getResource(filename)) != null)
2987                             ? new StringReader(resource) // Not found as file, but found as resource
2988                             : new FileReader(path.toString())
2989                     );
2990                 }
2991                 run(new ScannerIOContext(scanner));




  23  * questions.
  24  */
  25 
  26 package jdk.internal.jshell.tool;
  27 
  28 import java.io.BufferedReader;
  29 import java.io.BufferedWriter;
  30 import java.io.EOFException;
  31 import java.io.File;
  32 import java.io.FileNotFoundException;
  33 import java.io.FileReader;
  34 import java.io.IOException;
  35 import java.io.InputStream;
  36 import java.io.InputStreamReader;
  37 import java.io.PrintStream;
  38 import java.io.Reader;
  39 import java.io.StringReader;
  40 import java.lang.module.ModuleDescriptor;
  41 import java.lang.module.ModuleFinder;
  42 import java.lang.module.ModuleReference;
  43 import java.net.URI;
  44 import java.net.http.HttpClient;
  45 import java.net.http.HttpRequest;
  46 import java.net.http.HttpResponse;
  47 import java.nio.channels.UnresolvedAddressException;
  48 import java.nio.charset.Charset;
  49 import java.nio.file.FileSystems;
  50 import java.nio.file.Files;
  51 import java.nio.file.InvalidPathException;
  52 import java.nio.file.Path;
  53 import java.nio.file.Paths;
  54 import java.text.MessageFormat;
  55 import java.util.ArrayList;
  56 import java.util.Arrays;
  57 import java.util.Collection;
  58 import java.util.Collections;
  59 import java.util.HashMap;
  60 import java.util.HashSet;
  61 import java.util.Iterator;
  62 import java.util.LinkedHashMap;
  63 import java.util.LinkedHashSet;
  64 import java.util.List;
  65 import java.util.Locale;
  66 import java.util.Map;
  67 import java.util.Map.Entry;


2956         }
2957         Stream<Snippet> stream = argsOptionsToSnippets(state::snippets,
2958                 this::mainActive, arg, "/list");
2959         if (stream == null) {
2960             return false;
2961         }
2962 
2963         // prevent double newline on empty list
2964         boolean[] hasOutput = new boolean[1];
2965         stream.forEachOrdered(sn -> {
2966             if (!hasOutput[0]) {
2967                 cmdout.println();
2968                 hasOutput[0] = true;
2969             }
2970             cmdout.printf("%4s : %s\n", sn.id(), sn.source().replace("\n", "\n       "));
2971         });
2972         return true;
2973     }
2974 
2975     private boolean cmdOpen(String filename) {
2976         if (filename.startsWith("http://") || filename.startsWith("https://")) {
2977             return runUrl(filename, "/open");
2978         } else {
2979             return runFile(filename, "/open");
2980         }
2981     }
2982 
2983     private boolean runUrl(String fileUrl, String context) {
2984         try {
2985             var httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL).build();
2986             var request = HttpRequest.newBuilder(URI.create(fileUrl)).build();
2987             var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
2988 
2989             if (response.statusCode() == 200) {
2990                 var scanner = new Scanner(response.body());
2991                 run(new ScannerIOContext(scanner));
2992                 return true;
2993             } else {
2994                 errormsg("jshell.err.url.not.accessible", context, fileUrl, response.statusCode());
2995                 return false;
2996             }
2997         } catch (UnresolvedAddressException | InterruptedException | IOException e) {
2998             errormsg("jshell.err.url.exception", context, fileUrl, e);
2999         }
3000 
3001         return false;
3002     }
3003 
3004     private boolean runFile(String filename, String context) {
3005         if (!filename.isEmpty()) {
3006             try {
3007                 Scanner scanner;
3008                 if (!interactiveModeBegun && filename.equals("-")) {
3009                     // - on command line: no interactive later, read from input
3010                     regenerateOnDeath = false;
3011                     scanner = new Scanner(cmdin);
3012                 } else {
3013                     Path path = toPathResolvingUserHome(filename);
3014                     String resource;
3015                     scanner = new Scanner(
3016                             (!Files.exists(path) && (resource = getResource(filename)) != null)
3017                             ? new StringReader(resource) // Not found as file, but found as resource
3018                             : new FileReader(path.toString())
3019                     );
3020                 }
3021                 run(new ScannerIOContext(scanner));


< prev index next >