From d858e5fe8bdb072ff22f6cca8d8f08678d8a1988 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 27 Apr 2017 08:46:05 +0200 Subject: [PATCH] Add an InputStreamSource for reuse --- .../main/java/org/jline/builtins/Source.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/Source.java b/builtins/src/main/java/org/jline/builtins/Source.java index c1db16233..be308c835 100644 --- a/builtins/src/main/java/org/jline/builtins/Source.java +++ b/builtins/src/main/java/org/jline/builtins/Source.java @@ -15,6 +15,7 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Objects; public interface Source { @@ -27,7 +28,7 @@ class URLSource implements Source { final String name; public URLSource(URL url, String name) { - this.url = url; + this.url = Objects.requireNonNull(url); this.name = name; } @@ -48,12 +49,11 @@ class PathSource implements Source { final String name; public PathSource(File file, String name) { - this.path = file.toPath(); - this.name = name; + this(Objects.requireNonNull(file).toPath(), name); } public PathSource(Path path, String name) { - this.path = path; + this.path = Objects.requireNonNull(path); this.name = name; } @@ -69,19 +69,39 @@ public InputStream read() throws IOException { } - class StdInSource implements Source { + class InputStreamSource implements Source { + final InputStream in; + final String name; + + public InputStreamSource(InputStream in, boolean close, String name) { + Objects.requireNonNull(in); + if (close) { + this.in = in; + } else { + this.in = new FilterInputStream(in) { + @Override + public void close() throws IOException { + } + }; + } + this.name = name; + } + @Override public String getName() { - return null; + return name; } @Override public InputStream read() throws IOException { - return new FilterInputStream(System.in) { - @Override - public void close() throws IOException { - } - }; + return in; + } + } + + class StdInSource extends InputStreamSource { + + public StdInSource() { + super(System.in, false, null); } }