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 |