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


2982             cmdout.printf("%4s : %s\n", sn.id(), sn.source().replace("\n", "\n       "));
2983         });
2984         return true;
2985     }
2986 
2987     private boolean cmdOpen(String filename) {
2988         return runFile(filename, "/open");
2989     }
2990 
2991     private boolean runFile(String filename, String context) {
2992         if (!filename.isEmpty()) {
2993             try {
2994                 Scanner scanner;
2995                 if (!interactiveModeBegun && filename.equals("-")) {
2996                     // - on command line: no interactive later, read from input
2997                     regenerateOnDeath = false;
2998                     scanner = new Scanner(cmdin);
2999                 } else {
3000                     Path path = toPathResolvingUserHome(filename);
3001                     String resource;
3002                     scanner = new Scanner(
3003                             (!Files.exists(path) && (resource = getResource(filename)) != null)
3004                             ? new StringReader(resource) // Not found as file, but found as resource
3005                             : new FileReader(path.toString())
3006                     );







3007                 }
3008                 run(new ScannerIOContext(scanner));
3009                 return true;
3010             } catch (FileNotFoundException e) {
3011                 errormsg("jshell.err.file.not.found", context, filename, e.getMessage());
3012             } catch (Exception e) {
3013                 errormsg("jshell.err.file.exception", context, filename, e);
3014             }
3015         } else {
3016             errormsg("jshell.err.file.filename", context);
3017         }
3018         return false;
3019     }
3020 
3021     static String getResource(String name) {
3022         if (BUILTIN_FILE_PATTERN.matcher(name).matches()) {
3023             try {
3024                 return readResource(name);
3025             } catch (Throwable t) {
3026                 // Fall-through to null




  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.MalformedURLException;
  44 import java.net.URI;
  45 import java.net.URL;
  46 import java.nio.charset.Charset;
  47 import java.nio.file.FileSystems;
  48 import java.nio.file.Files;
  49 import java.nio.file.InvalidPathException;
  50 import java.nio.file.Path;
  51 import java.nio.file.Paths;
  52 import java.text.MessageFormat;
  53 import java.util.ArrayList;
  54 import java.util.Arrays;
  55 import java.util.Collection;
  56 import java.util.Collections;
  57 import java.util.HashMap;
  58 import java.util.HashSet;
  59 import java.util.Iterator;
  60 import java.util.LinkedHashMap;
  61 import java.util.LinkedHashSet;
  62 import java.util.List;
  63 import java.util.Locale;
  64 import java.util.Map;
  65 import java.util.Map.Entry;


2985             cmdout.printf("%4s : %s\n", sn.id(), sn.source().replace("\n", "\n       "));
2986         });
2987         return true;
2988     }
2989 
2990     private boolean cmdOpen(String filename) {
2991         return runFile(filename, "/open");
2992     }
2993 
2994     private boolean runFile(String filename, String context) {
2995         if (!filename.isEmpty()) {
2996             try {
2997                 Scanner scanner;
2998                 if (!interactiveModeBegun && filename.equals("-")) {
2999                     // - on command line: no interactive later, read from input
3000                     regenerateOnDeath = false;
3001                     scanner = new Scanner(cmdin);
3002                 } else {
3003                     Path path = toPathResolvingUserHome(filename);
3004                     String resource;
3005                     if (Files.exists(path)) {
3006                         scanner = new Scanner(new FileReader(path.toString()));
3007                     } else if ((resource = getResource(filename)) != null) {
3008                         scanner = new Scanner(new StringReader(resource));
3009                     } else {
3010                         try {
3011                             var url = new URL(filename);
3012                             scanner = new Scanner(url.openStream());
3013                         } catch (MalformedURLException mue) {
3014                             throw new FileNotFoundException(filename);
3015                         }
3016                     }
3017                 }
3018                 run(new ScannerIOContext(scanner));
3019                 return true;
3020             } catch (FileNotFoundException e) {
3021                 errormsg("jshell.err.file.not.found", context, filename, e.getMessage());
3022             } catch (Exception e) {
3023                 errormsg("jshell.err.file.exception", context, filename, e);
3024             }
3025         } else {
3026             errormsg("jshell.err.file.filename", context);
3027         }
3028         return false;
3029     }
3030 
3031     static String getResource(String name) {
3032         if (BUILTIN_FILE_PATTERN.matcher(name).matches()) {
3033             try {
3034                 return readResource(name);
3035             } catch (Throwable t) {
3036                 // Fall-through to null


< prev index next >