From cb6b2a86c30aa45cd1e70d73e7a8625696e127c2 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 7 Nov 2024 09:57:28 +0100 Subject: [PATCH 1/4] Code cleanup --- console/src/main/java/org/jline/console/CmdDesc.java | 2 +- .../java/org/jline/console/impl/ConsoleEngineImpl.java | 6 +++--- .../main/java/org/jline/console/impl/DefaultPrinter.java | 2 +- .../java/org/jline/console/impl/JlineCommandRegistry.java | 2 +- .../java/org/jline/console/impl/SystemHighlighter.java | 2 +- .../java/org/jline/console/impl/SystemRegistryImpl.java | 8 ++++---- .../src/main/java/org/jline/widget/TailTipWidgets.java | 7 +------ 7 files changed, 12 insertions(+), 17 deletions(-) diff --git a/console/src/main/java/org/jline/console/CmdDesc.java b/console/src/main/java/org/jline/console/CmdDesc.java index 69e186269..307e57907 100644 --- a/console/src/main/java/org/jline/console/CmdDesc.java +++ b/console/src/main/java/org/jline/console/CmdDesc.java @@ -124,6 +124,6 @@ public boolean optionWithValue(String option) { } public AttributedString optionDescription(String key) { - return optsDesc.get(key).size() > 0 ? optsDesc.get(key).get(0) : new AttributedString(""); + return !optsDesc.get(key).isEmpty() ? optsDesc.get(key).get(0) : new AttributedString(""); } } diff --git a/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java b/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java index 11e691525..b58f1ead7 100644 --- a/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java +++ b/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java @@ -1021,7 +1021,7 @@ private Object aliascmd(CommandInput input) { alias = alias.replaceAll("%\\{" + j + ":-", "\\$\\{" + j + ":-"); } alias = alias.replaceAll("%@", "\\$@"); - alias = alias.replaceAll("%\\{@}", "\\$\\{@\\}"); + alias = alias.replaceAll("%\\{@}", "\\${@}"); aliases.put(args.get(0), alias); persist(aliasFile, aliases); } @@ -1070,7 +1070,7 @@ private Object pipe(CommandInput input) { pipes.remove(p.trim()); } } - } else if (opt.isSet("list") || opt.args().size() == 0) { + } else if (opt.isSet("list") || opt.args().isEmpty()) { options.put(Printer.MAX_DEPTH, 0); printer.println(options, pipes); } else if (opt.args().size() != 3) { @@ -1305,7 +1305,7 @@ public void complete(LineReader reader, ParsedLine commandLine, List List words = commandLine.words(); if (words.size() > 1) { String h = words.get(words.size() - 2); - if (h != null && h.length() > 0) { + if (h != null && !h.isEmpty()) { String v = aliases.get(h); if (v != null) { candidates.add(new Candidate(AttributedString.stripAnsi(v), v, null, null, null, null, true)); diff --git a/console/src/main/java/org/jline/console/impl/DefaultPrinter.java b/console/src/main/java/org/jline/console/impl/DefaultPrinter.java index 441032942..e65cb0bae 100644 --- a/console/src/main/java/org/jline/console/impl/DefaultPrinter.java +++ b/console/src/main/java/org/jline/console/impl/DefaultPrinter.java @@ -229,7 +229,7 @@ public Exception prntCommand(CommandInput input) { Options opt = parseOptions(usage, input.xargs()); Map options = compileOptions(opt); List args = opt.argObjects(); - if (args.size() > 0) { + if (!args.isEmpty()) { println(options, args.get(0)); } } catch (Exception e) { diff --git a/console/src/main/java/org/jline/console/impl/JlineCommandRegistry.java b/console/src/main/java/org/jline/console/impl/JlineCommandRegistry.java index c486c63bf..ef10244d9 100644 --- a/console/src/main/java/org/jline/console/impl/JlineCommandRegistry.java +++ b/console/src/main/java/org/jline/console/impl/JlineCommandRegistry.java @@ -151,7 +151,7 @@ public static CmdDesc compileCommandDescription(String helpMessage) { if (ind > 0) { String o = s.substring(0, ind); String d = s.substring(ind); - if (o.trim().length() > 0) { + if (!o.trim().isEmpty()) { prevOpt = o.trim(); options.put(prevOpt, new ArrayList<>(Collections.singletonList(highlightComment(d.trim())))); } diff --git a/console/src/main/java/org/jline/console/impl/SystemHighlighter.java b/console/src/main/java/org/jline/console/impl/SystemHighlighter.java index 00ef3b918..aa42cca72 100644 --- a/console/src/main/java/org/jline/console/impl/SystemHighlighter.java +++ b/console/src/main/java/org/jline/console/impl/SystemHighlighter.java @@ -157,7 +157,7 @@ protected AttributedString systemHighlight(LineReader reader, String buffer) { AttributedString out; Parser parser = reader.getParser(); ParsedLine pl = parser.parse(buffer, 0, Parser.ParseContext.SPLIT_LINE); - String command = pl.words().size() > 0 ? parser.getCommand(pl.words().get(0)) : ""; + String command = !pl.words().isEmpty() ? parser.getCommand(pl.words().get(0)) : ""; command = command.startsWith("!") ? "!" : command; commandIndex = buffer.indexOf(command) + command.length(); if (buffer.trim().isEmpty()) { diff --git a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java index df521d7d1..eafb9c402 100644 --- a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java +++ b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java @@ -777,7 +777,7 @@ private List compileCommandLine(String commandLine) { boolean done = true; boolean statement = false; List arglist = new ArrayList<>(); - if (_words.size() > 0) { + if (!_words.isEmpty()) { arglist.addAll(_words.subList(1, _words.size())); } if (rawLine != null || (pipes.size() > 1 && customPipes.containsKey(pipes.get(pipes.size() - 2)))) { @@ -1479,7 +1479,7 @@ private void printCommands(Collection commands, int max) { } private String doCommandInfo(List info) { - return info != null && info.size() > 0 ? info.get(0) : " "; + return info != null && !info.isEmpty() ? info.get(0) : " "; } private boolean isInTopics(List args, String name) { @@ -1803,7 +1803,7 @@ public void complete(LineReader reader, ParsedLine commandLine, List } if (curBuf.startsWith("--") && !curBuf.contains("=")) { doCandidates(candidates, names.options(), curBuf, "", param); - } else if (param.length() == 0) { + } else if (param.isEmpty()) { doCandidates(candidates, names.fieldsAndValues(), curBuf, "", ""); } else if (param.contains(".")) { int point = buffer.lastIndexOf("."); @@ -1963,7 +1963,7 @@ public void extractNames(String line) { public String encloseBy(String param) { boolean quoted = - param.length() > 0 && (param.startsWith("\"") || param.startsWith("'") || param.startsWith("/")); + !param.isEmpty() && (param.startsWith("\"") || param.startsWith("'") || param.startsWith("/")); if (quoted && param.length() > 1) { quoted = !param.endsWith(Character.toString(param.charAt(0))); } diff --git a/console/src/main/java/org/jline/widget/TailTipWidgets.java b/console/src/main/java/org/jline/widget/TailTipWidgets.java index b7c214771..d4d3a1a42 100644 --- a/console/src/main/java/org/jline/widget/TailTipWidgets.java +++ b/console/src/main/java/org/jline/widget/TailTipWidgets.java @@ -258,13 +258,8 @@ public boolean tailtipUpdateStatus() { private boolean doTailTip(String widget) { Buffer buffer = buffer(); callWidget(widget); - Pair cmdkey; List args = args(); - if (buffer.length() == buffer.cursor()) { - cmdkey = cmdDescs.evaluateCommandLine(buffer.toString(), args); - } else { - cmdkey = cmdDescs.evaluateCommandLine(buffer.toString(), buffer.cursor()); - } + Pair cmdkey = cmdDescs.evaluateCommandLine(buffer.toString(), args(), buffer.cursor()); CmdDesc cmdDesc = cmdDescs.getDescription(cmdkey.getU()); if (cmdDesc == null) { setErrorPattern(null); From 088bcff3210d0c713c288448c7e9d17444d16d85 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 7 Nov 2024 10:15:27 +0100 Subject: [PATCH 2/4] Code cleanup --- .../java/org/jline/builtins/Commands.java | 16 +++++++------- .../main/java/org/jline/builtins/Nano.java | 21 +++++++------------ demo/src/main/java/org/jline/demo/Repl.java | 5 +++-- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/Commands.java b/builtins/src/main/java/org/jline/builtins/Commands.java index 6ab5d84ad..23a068394 100644 --- a/builtins/src/main/java/org/jline/builtins/Commands.java +++ b/builtins/src/main/java/org/jline/builtins/Commands.java @@ -240,13 +240,13 @@ public static void history(LineReader reader, PrintStream out, PrintStream err, } else if (opt.isSet("save")) { history.save(); } else if (opt.isSet("A")) { - Path file = opt.args().size() > 0 ? currentDir.resolve(opt.args().get(0)) : null; + Path file = !opt.args().isEmpty() ? currentDir.resolve(opt.args().get(0)) : null; history.append(file, increment); } else if (opt.isSet("R")) { - Path file = opt.args().size() > 0 ? currentDir.resolve(opt.args().get(0)) : null; + Path file = !opt.args().isEmpty() ? currentDir.resolve(opt.args().get(0)) : null; history.read(file, increment); } else if (opt.isSet("W")) { - Path file = opt.args().size() > 0 ? currentDir.resolve(opt.args().get(0)) : null; + Path file = !opt.args().isEmpty() ? currentDir.resolve(opt.args().get(0)) : null; history.write(file, increment); } else { done = false; @@ -361,7 +361,7 @@ public ReExecute(History history, Options opt) throws IOException { if (edit) { cmdFile = File.createTempFile("jline-history-", null); cmdWriter = new FileWriter(cmdFile); - } else if (opt.args().size() > 0) { + } else if (!opt.args().isEmpty()) { String[] s = opt.args().get(argId).split("="); if (s.length == 2) { argId = argId + 1; @@ -640,7 +640,7 @@ public static void keymap(LineReader reader, PrintStream out, PrintStream err, S if (opt.isSet("l")) { boolean commands = opt.isSet("L"); // TODO: handle commands - if (opt.args().size() > 0) { + if (!opt.args().isEmpty()) { for (String arg : opt.args()) { KeyMap map = keyMaps.get(arg); if (map == null) { @@ -704,7 +704,7 @@ public static void keymap(LineReader reader, PrintStream out, PrintStream err, S err.println("keymap: keymap can not be selected with -N"); return; } - if (opt.args().size() > 0) { + if (!opt.args().isEmpty()) { err.println("keymap: too many arguments for -d"); return; } @@ -869,9 +869,9 @@ public static void keymap(LineReader reader, PrintStream out, PrintStream err, S err.println("keymap: option -p requires a prefix string"); return; } - if (opt.args().size() > 0 || !opt.isSet("e") && !opt.isSet("v")) { + if (!opt.args().isEmpty() || !opt.isSet("e") && !opt.isSet("v")) { Map bound = map.getBoundKeys(); - String seq = opt.args().size() > 0 ? KeyMap.translate(opt.args().get(0)) : null; + String seq = !opt.args().isEmpty() ? KeyMap.translate(opt.args().get(0)) : null; Map.Entry begin = null; String last = null; Iterator> iterator = bound.entrySet().iterator(); diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java index bfa231d8d..d278bdc8f 100644 --- a/builtins/src/main/java/org/jline/builtins/Nano.java +++ b/builtins/src/main/java/org/jline/builtins/Nano.java @@ -1450,7 +1450,7 @@ public String up(String hint) { } boolean found = false; for (int pid = patternId; pid < patterns.size(); pid++) { - if (hint.length() == 0 || patterns.get(pid).startsWith(hint)) { + if (hint.isEmpty() || patterns.get(pid).startsWith(hint)) { patternId = pid + 1; out = patterns.get(pid); found = true; @@ -1467,7 +1467,7 @@ public String up(String hint) { public String down(String hint) { String out = hint; - if (patterns.size() > 0) { + if (!patterns.isEmpty()) { if (lastMoveUp) { patternId--; } @@ -1493,7 +1493,7 @@ public String down(String hint) { } public void add(String pattern) { - if (pattern.trim().length() == 0) { + if (pattern.trim().isEmpty()) { return; } patterns.remove(pattern); @@ -1512,7 +1512,7 @@ public void persist() { try (BufferedWriter writer = Files.newBufferedWriter( historyFile.toAbsolutePath(), StandardOpenOption.WRITE, StandardOpenOption.CREATE)) { for (String s : patterns) { - if (s.trim().length() > 0) { + if (!s.trim().isEmpty()) { writer.append(s); writer.newLine(); } @@ -2151,7 +2151,7 @@ private boolean save(String name) throws IOException { setMessage("Wrote " + buffer.lines.size() + " lines"); return true; } catch (IOException e) { - setMessage("Error writing " + name + ": " + e.toString()); + setMessage("Error writing " + name + ": " + e); return false; } finally { Files.deleteIfExists(t); @@ -2312,7 +2312,7 @@ private String getReadMessage() { return sb.toString(); } - void gotoLine() throws IOException { + void gotoLine() { KeyMap readKeyMap = new KeyMap<>(); readKeyMap.setUnicode(Operation.INSERT); for (char i = 32; i < 256; i++) { @@ -2786,12 +2786,7 @@ String replace() throws IOException { if (editBuffer.length() > 0) { replaceTerm = editBuffer.toString(); } - if (replaceTerm == null) { - setMessage("Cancelled"); - throw new IllegalArgumentException(); - } else { - patternHistory.add(replaceTerm); - } + patternHistory.add(replaceTerm); return replaceTerm; case HELP: help("nano-replace-help.txt"); @@ -2965,7 +2960,7 @@ void smoothScrolling() { setMessage("Smooth scrolling " + (smoothScrolling ? "enabled" : "disabled")); } - void mouseSupport() throws IOException { + void mouseSupport() { mouseSupport = !mouseSupport; setMessage("Mouse support " + (mouseSupport ? "enabled" : "disabled")); terminal.trackMouse(mouseSupport ? Terminal.MouseTracking.Normal : Terminal.MouseTracking.Off); diff --git a/demo/src/main/java/org/jline/demo/Repl.java b/demo/src/main/java/org/jline/demo/Repl.java index 362e0bd06..895aee212 100644 --- a/demo/src/main/java/org/jline/demo/Repl.java +++ b/demo/src/main/java/org/jline/demo/Repl.java @@ -62,6 +62,7 @@ */ public class Repl { + @SuppressWarnings("resource") protected static class MyCommands extends JlineCommandRegistry implements CommandRegistry { private LineReader reader; private final Supplier workDir; @@ -95,7 +96,7 @@ private void tput(CommandInput input) { try { Options opt = parseOptions(usage, input.xargs()); List argv = opt.args(); - if (argv.size() > 0) { + if (!argv.isEmpty()) { Capability vcap = Capability.byName(argv.get(0)); if (vcap != null) { terminal() @@ -161,7 +162,7 @@ private void echo(CommandInput input) { List argv = opt.args(); if (opt.isSet("version")) { terminal().writer().println("echo version: v0.1"); - } else if (opt.args().size() >= 1) { + } else if (!opt.args().isEmpty()) { terminal().writer().println(String.join(" ", opt.args())); } } catch (Exception e) { From ddd1c7db8e1121a0608b640e9c00c53face2949a Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 8 Nov 2024 02:29:08 +0100 Subject: [PATCH 3/4] Cleanup --- .../java/org/jline/builtins/Commands.java | 12 +++--- .../main/java/org/jline/builtins/Less.java | 39 +++++++++---------- .../main/java/org/jline/builtins/Nano.java | 9 ++--- .../org/jline/builtins/ScreenTerminal.java | 6 +-- .../org/jline/builtins/SyntaxHighlighter.java | 10 ++--- .../example/ArgumentMaskCallbackReader.java | 2 +- .../example/OptionMaskCallbackReader.java | 2 +- .../org/jline/example/PasswordReader.java | 2 +- .../java/org/jline/console/ConsoleEngine.java | 14 ++++++- .../jline/console/impl/ConsoleEngineImpl.java | 31 +++++++-------- .../jline/console/impl/SystemHighlighter.java | 5 +-- .../java/org/jline/reader/LineReader.java | 7 +++- .../org/jline/reader/impl/LineReaderImpl.java | 15 ++++--- 13 files changed, 82 insertions(+), 72 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/Commands.java b/builtins/src/main/java/org/jline/builtins/Commands.java index 23a068394..aadc6baac 100644 --- a/builtins/src/main/java/org/jline/builtins/Commands.java +++ b/builtins/src/main/java/org/jline/builtins/Commands.java @@ -1682,21 +1682,21 @@ public static void highlighter( pathStream.filter(pathMatcher::matches).forEach(p -> out.println(p.getFileName())); } } else { - File themeFile; + Path themeFile; if (opt.isSet("view")) { - themeFile = new File(replaceFileName(currentTheme, opt.get("view"))); + themeFile = Paths.get(replaceFileName(currentTheme, opt.get("view"))); } else { - themeFile = currentTheme.toFile(); + themeFile = currentTheme; } - out.println(themeFile.getAbsolutePath()); - try (BufferedReader reader = new BufferedReader(new FileReader(themeFile))) { + out.println(themeFile.toAbsolutePath()); + try (BufferedReader reader = Files.newBufferedReader(themeFile)) { String line; List> tokens = new ArrayList<>(); int maxKeyLen = 0; int maxValueLen = 0; while ((line = reader.readLine()) != null) { line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = Arrays.asList(line.split("\\s+", 2)); if (parts.get(0).matches(REGEX_TOKEN_NAME)) { if (parts.get(0).length() > maxKeyLen) { diff --git a/builtins/src/main/java/org/jline/builtins/Less.java b/builtins/src/main/java/org/jline/builtins/Less.java index ee06d887c..1c922d04c 100644 --- a/builtins/src/main/java/org/jline/builtins/Less.java +++ b/builtins/src/main/java/org/jline/builtins/Less.java @@ -11,7 +11,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -218,11 +217,11 @@ public Less(Terminal terminal, Path currentDir, Options opts, ConfigurationPath } private void parseConfig(Path file) throws IOException { - try (BufferedReader reader = new BufferedReader(new FileReader(file.toFile()))) { + try (BufferedReader reader = Files.newBufferedReader(file)) { String line = reader.readLine(); while (line != null) { line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = SyntaxHighlighter.RuleSplitter.split(line); if (parts.get(0).equals(COMMAND_INCLUDE)) { SyntaxHighlighter.nanorcInclude(parts.get(1), syntaxFiles); @@ -840,20 +839,18 @@ private void addFile() throws IOException, InterruptedException { LineEditor lineEditor = new LineEditor(begPos); while (true) { checkInterrupted(); - Operation op; - switch (op = bindingReader.readBinding(fileKeyMap)) { - case ACCEPT: - String name = buffer.substring(begPos); - addSource(name); - try { - openSource(); - } catch (Exception exp) { - ssp.restore(name); - } - return; - default: - curPos = lineEditor.editBuffer(op, curPos); - break; + Operation op = bindingReader.readBinding(fileKeyMap); + if (Objects.requireNonNull(op) == Operation.ACCEPT) { + String name = buffer.substring(begPos); + addSource(name); + try { + openSource(); + } catch (Exception exp) { + ssp.restore(name); + } + return; + } else { + curPos = lineEditor.editBuffer(op, curPos); } if (curPos > begPos) { display(false, curPos); @@ -911,7 +908,7 @@ private boolean search() throws IOException, InterruptedException { try { String _pattern = buffer.substring(1); if (type == '&') { - displayPattern = _pattern.length() > 0 ? _pattern : null; + displayPattern = !_pattern.isEmpty() ? _pattern : null; getPattern(true); } else { pattern = _pattern; @@ -1025,7 +1022,7 @@ protected void openSource() throws IOException { if (displayMessage) { AttributedStringBuilder asb = new AttributedStringBuilder(); asb.style(AttributedStyle.INVERSE); - asb.append(source.getName() + " (press RETURN)"); + asb.append(source.getName()).append(" (press RETURN)"); asb.toAttributedString().println(terminal); terminal.writer().flush(); terminal.reader().read(); @@ -1039,7 +1036,7 @@ protected void openSource() throws IOException { throw exp; } else { AttributedStringBuilder asb = new AttributedStringBuilder(); - asb.append(source.getName() + " not found!"); + asb.append(source.getName()).append(" not found!"); asb.toAttributedString().println(terminal); terminal.writer().flush(); open = false; @@ -1384,7 +1381,7 @@ synchronized boolean display(boolean oneScreen, Integer curPos) throws IOExcepti } if (buffer.length() > 0) { msg.append(" ").append(buffer); - } else if (bindingReader.getCurrentBuffer().length() > 0 + } else if (!bindingReader.getCurrentBuffer().isEmpty() && terminal.reader().peek(1) == NonBlockingReader.READ_EXPIRED) { msg.append(" ").append(printable(bindingReader.getCurrentBuffer())); } else if (message != null) { diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java index d278bdc8f..842ba3d50 100644 --- a/builtins/src/main/java/org/jline/builtins/Nano.java +++ b/builtins/src/main/java/org/jline/builtins/Nano.java @@ -13,7 +13,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -1656,11 +1655,11 @@ public Nano(Terminal terminal, Path root, Options opts, ConfigurationPath config } private void parseConfig(Path file) throws IOException { - try (BufferedReader reader = new BufferedReader(new FileReader(file.toFile()))) { + try (BufferedReader reader = Files.newBufferedReader(file)) { String line; while ((line = reader.readLine()) != null) { line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = SyntaxHighlighter.RuleSplitter.split(line); if (parts.get(0).equals(COMMAND_INCLUDE)) { SyntaxHighlighter.nanorcInclude(parts.get(1), syntaxFiles); @@ -2360,7 +2359,7 @@ void gotoLine() { int[] args = {0, 0}; try { for (int i = 0; i < pos.length; i++) { - if (pos[i].trim().length() > 0) { + if (!pos[i].trim().isEmpty()) { args[i] = Integer.parseInt(pos[i]) - 1; if (args[i] < 0) { throw new NumberFormatException(); @@ -2863,7 +2862,7 @@ String computeCurPos() { sb.append("/"); sb.append(buffer.length(buffer.lines.get(buffer.line)) + 1); sb.append(" ("); - if (buffer.lines.get(buffer.line).length() > 0) { + if (!buffer.lines.get(buffer.line).isEmpty()) { sb.append(Math.round( (100.0 * (buffer.offsetInLine + buffer.column)) / (buffer.length(buffer.lines.get(buffer.line))))); } else { diff --git a/builtins/src/main/java/org/jline/builtins/ScreenTerminal.java b/builtins/src/main/java/org/jline/builtins/ScreenTerminal.java index a6f6c89bd..288010ba6 100644 --- a/builtins/src/main/java/org/jline/builtins/ScreenTerminal.java +++ b/builtins/src/main/java/org/jline/builtins/ScreenTerminal.java @@ -1083,7 +1083,7 @@ private void csi_DECSTR(String p) { private String[] vt100_parse_params(String p, String[] defaults) { String prefix = ""; - if (p.length() > 0) { + if (!p.isEmpty()) { if (p.charAt(0) >= '<' && p.charAt(0) <= '?') { prefix = "" + p.charAt(0); p = p.substring(1); @@ -1094,7 +1094,7 @@ private String[] vt100_parse_params(String p, String[] defaults) { String[] values = new String[n]; for (int i = 0; i < n; i++) { String value = null; - if (i < ps.length && ps[i].length() > 0) { + if (i < ps.length && !ps[i].isEmpty()) { value = prefix + ps[i]; } if (value == null && i < defaults.length) { @@ -1111,7 +1111,7 @@ private String[] vt100_parse_params(String p, String[] defaults) { private int[] vt100_parse_params(String p, int[] defaults) { String prefix = ""; p = p == null ? "" : p; - if (p.length() > 0) { + if (!p.isEmpty()) { if (p.charAt(0) >= '<' && p.charAt(0) <= '?') { prefix = p.substring(0, 1); p = p.substring(1); diff --git a/builtins/src/main/java/org/jline/builtins/SyntaxHighlighter.java b/builtins/src/main/java/org/jline/builtins/SyntaxHighlighter.java index 4658633b1..3fe3e9bcd 100644 --- a/builtins/src/main/java/org/jline/builtins/SyntaxHighlighter.java +++ b/builtins/src/main/java/org/jline/builtins/SyntaxHighlighter.java @@ -81,11 +81,11 @@ protected static SyntaxHighlighter build( try { if (colorTheme.isEmpty() && p.getFileName().toString().endsWith(TYPE_NANORCTHEME)) { out.setCurrentTheme(p); - try (BufferedReader reader = new BufferedReader(new FileReader(p.toFile()))) { + try (BufferedReader reader = Files.newBufferedReader(p)) { String line; while ((line = reader.readLine()) != null) { line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = Arrays.asList(line.split("\\s+", 2)); colorTheme.put(parts.get(0), parts.get(1)); } @@ -126,11 +126,11 @@ public static SyntaxHighlighter build(Path nanorc, String syntaxName) { SyntaxHighlighter out = new SyntaxHighlighter(nanorc, syntaxName); List syntaxFiles = new ArrayList<>(); try { - try (BufferedReader reader = new BufferedReader(new FileReader(nanorc.toFile()))) { + try (BufferedReader reader = Files.newBufferedReader(nanorc)) { String line; while ((line = reader.readLine()) != null) { line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = RuleSplitter.split(line); if (parts.get(0).equals(COMMAND_INCLUDE)) { nanorcInclude(parts.get(1), syntaxFiles); @@ -496,7 +496,7 @@ public void parse() throws IOException { while ((line = reader.readLine()) != null) { idx++; line = line.trim(); - if (line.length() > 0 && !line.startsWith("#")) { + if (!line.isEmpty() && !line.startsWith("#")) { List parts = RuleSplitter.split(fixRegexes(line)); if (parts.get(0).equals("syntax")) { syntaxName = parts.get(1); diff --git a/builtins/src/test/java/org/jline/example/ArgumentMaskCallbackReader.java b/builtins/src/test/java/org/jline/example/ArgumentMaskCallbackReader.java index 0d12e9ce8..7fbb39504 100644 --- a/builtins/src/test/java/org/jline/example/ArgumentMaskCallbackReader.java +++ b/builtins/src/test/java/org/jline/example/ArgumentMaskCallbackReader.java @@ -41,7 +41,7 @@ public static void main(String[] args) throws IOException { do { line = reader.readLine("prompt> ", null, maskingCallback, null); System.out.println("Got line: " + line); - } while (line != null && line.length() > 0); + } while (line != null && !line.isEmpty()); } private static class CommandArgumentMask implements MaskingCallback { diff --git a/builtins/src/test/java/org/jline/example/OptionMaskCallbackReader.java b/builtins/src/test/java/org/jline/example/OptionMaskCallbackReader.java index 8d845c8be..5606a4765 100644 --- a/builtins/src/test/java/org/jline/example/OptionMaskCallbackReader.java +++ b/builtins/src/test/java/org/jline/example/OptionMaskCallbackReader.java @@ -39,7 +39,7 @@ public static void main(String[] args) throws IOException { do { line = reader.readLine("prompt> ", null, maskingCallback, null); System.out.println("Got line: " + line); - } while (line != null && line.length() > 0); + } while (line != null && !line.isEmpty()); } private static class OptionValueMask implements MaskingCallback { diff --git a/builtins/src/test/java/org/jline/example/PasswordReader.java b/builtins/src/test/java/org/jline/example/PasswordReader.java index 67ab8a55b..725bb54d3 100644 --- a/builtins/src/test/java/org/jline/example/PasswordReader.java +++ b/builtins/src/test/java/org/jline/example/PasswordReader.java @@ -30,6 +30,6 @@ public static void main(String[] args) throws IOException { do { line = reader.readLine("Enter password> ", mask); System.out.println("Got password: " + line); - } while (line != null && line.length() > 0); + } while (line != null && !line.isEmpty()); } } diff --git a/console/src/main/java/org/jline/console/ConsoleEngine.java b/console/src/main/java/org/jline/console/ConsoleEngine.java index bf3742c3e..71647aa89 100644 --- a/console/src/main/java/org/jline/console/ConsoleEngine.java +++ b/console/src/main/java/org/jline/console/ConsoleEngine.java @@ -178,7 +178,19 @@ default Object execute(File script) throws Exception { * @return script execution result * @throws Exception in case of error */ - Object execute(File script, String rawLine, String[] args) throws Exception; + default Object execute(File script, String rawLine, String[] args) throws Exception { + return execute(script != null ? script.toPath() : null, rawLine, args); + } + + /** + * Executes either JLine or ScriptEngine script. + * @param script script file + * @param rawLine raw command line + * @param args script arguments + * @return script execution result + * @throws Exception in case of error + */ + Object execute(Path script, String rawLine, String[] args) throws Exception; /** * Post processes execution result. If result is to be assigned to the console variable diff --git a/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java b/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java index b58f1ead7..d8e1a0944 100644 --- a/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java +++ b/console/src/main/java/org/jline/console/impl/ConsoleEngineImpl.java @@ -11,7 +11,6 @@ import java.awt.Desktop; import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.lang.reflect.Method; import java.net.HttpURLConnection; @@ -373,7 +372,7 @@ private List scriptExtensions() { } private class ScriptFile { - private File script; + private Path script; private String extension = ""; private String cmdLine; private String[] args; @@ -386,9 +385,9 @@ public ScriptFile(String command, String cmdLine, String[] args) { return; } try { - this.script = new File(command); + this.script = Paths.get(command); this.cmdLine = cmdLine; - if (script.exists()) { + if (Files.exists(script)) { scriptExtension(command); } else if (engine.hasVariable(VAR_PATH)) { boolean found = false; @@ -397,7 +396,7 @@ public ScriptFile(String command, String cmdLine, String[] args) { String file = command + "." + e; Path path = Paths.get(p, file); if (path.toFile().exists()) { - script = path.toFile(); + script = path; scriptExtension(command); found = true; break; @@ -414,18 +413,18 @@ public ScriptFile(String command, String cmdLine, String[] args) { } } - public ScriptFile(File script, String cmdLine, String[] args) { - if (!script.exists()) { + public ScriptFile(Path script, String cmdLine, String[] args) { + if (!Files.exists(script)) { throw new IllegalArgumentException("Script file not found!"); } this.script = script; this.cmdLine = cmdLine; - scriptExtension(script.getName()); + scriptExtension(script.getFileName().toString()); doArgs(args); } private void scriptExtension(String command) { - String name = script.getName(); + String name = script.getFileName().toString(); this.extension = name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : ""; if (!isEngineScript() && !isConsoleScript()) { throw new IllegalArgumentException("Command not found: " + command); @@ -435,7 +434,7 @@ private void scriptExtension(String command) { private void doArgs(String[] args) { List _args = new ArrayList<>(); if (isConsoleScript()) { - _args.add(script.getAbsolutePath()); + _args.add(script.toAbsolutePath().toString()); } for (String a : args) { if (isConsoleScript()) { @@ -470,7 +469,7 @@ public boolean execute() throws Exception { result = null; if (Arrays.asList(args).contains(OPTION_HELP[0]) || Arrays.asList(args).contains(OPTION_HELP[1])) { - try (BufferedReader br = new BufferedReader(new FileReader(script))) { + try (BufferedReader br = Files.newBufferedReader(script)) { int size = 0; StringBuilder usage = new StringBuilder(); boolean helpEnd = false; @@ -527,7 +526,7 @@ private void internalExecute() throws Exception { executing = true; boolean done = true; String line = ""; - try (BufferedReader br = new BufferedReader(new FileReader(script))) { + try (BufferedReader br = Files.newBufferedReader(script)) { for (String l; (l = br.readLine()) != null; ) { if (l.trim().isEmpty() || l.trim().startsWith("#")) { done = true; @@ -591,7 +590,7 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); try { - sb.append("script:").append(script.getCanonicalPath()); + sb.append("script:").append(script.normalize()); } catch (Exception e) { sb.append(e.getMessage()); } @@ -611,7 +610,7 @@ public String toString() { } @Override - public Object execute(File script, String cmdLine, String[] args) throws Exception { + public Object execute(Path script, String cmdLine, String[] args) throws Exception { ScriptFile file = new ScriptFile(script, cmdLine, args); file.execute(); return file.getResult(); @@ -670,8 +669,8 @@ public Object execute(String cmd, String line, String[] args) throws Exception { if (parser().validCommandName(cmd)) { file = new ScriptFile(cmd, line, args); } else { - File f = new File(line.split("\\s+")[0]); - if (f.exists()) { + Path f = Paths.get(line.split("\\s+")[0]); + if (Files.exists(f)) { file = new ScriptFile(f, line, args); } } diff --git a/console/src/main/java/org/jline/console/impl/SystemHighlighter.java b/console/src/main/java/org/jline/console/impl/SystemHighlighter.java index aa42cca72..9cbf2a782 100644 --- a/console/src/main/java/org/jline/console/impl/SystemHighlighter.java +++ b/console/src/main/java/org/jline/console/impl/SystemHighlighter.java @@ -10,7 +10,6 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -82,7 +81,7 @@ public void refresh(LineReader lineReader) { currentTheme = compareThemes(sh, currentTheme); } if (currentTheme != null) { - try (BufferedReader reader = new BufferedReader(new FileReader(currentTheme.toFile()))) { + try (BufferedReader reader = Files.newBufferedReader(currentTheme)) { String line; Map tokens = new HashMap<>(); while ((line = reader.readLine()) != null) { @@ -147,7 +146,7 @@ public void addFileHighlight(String command, String subcommand, Collection 0) + return ((search != null && !search.isEmpty()) || reader.getRegionActive() != LineReader.RegionType.NONE || errorIndex > -1 || errorPattern != null); diff --git a/reader/src/main/java/org/jline/reader/LineReader.java b/reader/src/main/java/org/jline/reader/LineReader.java index 5318d8621..8a152f5a6 100644 --- a/reader/src/main/java/org/jline/reader/LineReader.java +++ b/reader/src/main/java/org/jline/reader/LineReader.java @@ -10,6 +10,7 @@ import java.io.File; import java.io.InputStream; +import java.nio.file.Path; import java.util.Collection; import java.util.Map; import java.util.function.IntConsumer; @@ -766,7 +767,11 @@ String readLine(String prompt, String rightPrompt, MaskingCallback maskingCallba void addCommandsInBuffer(Collection commands); - void editAndAddInBuffer(File file) throws Exception; + default void editAndAddInBuffer(File file) throws Exception { + editAndAddInBuffer(file != null ? file.toPath() : null); + } + + void editAndAddInBuffer(Path file) throws Exception; String getLastBinding(); diff --git a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java index cf39a924b..b7c9d6257 100644 --- a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java +++ b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java @@ -10,7 +10,6 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.FileWriter; import java.io.Flushable; import java.io.IOError; @@ -1131,16 +1130,16 @@ public void addCommandsInBuffer(Collection commands) { } @Override - public void editAndAddInBuffer(File file) throws Exception { + public void editAndAddInBuffer(Path file) throws Exception { if (isSet(Option.BRACKETED_PASTE)) { terminal.writer().write(BRACKETED_PASTE_OFF); } - Constructor ctor = Class.forName("org.jline.builtins.Nano").getConstructor(Terminal.class, File.class); - Editor editor = (Editor) ctor.newInstance(terminal, new File(file.getParent())); + Constructor ctor = Class.forName("org.jline.builtins.Nano").getConstructor(Terminal.class, Path.class); + Editor editor = (Editor) ctor.newInstance(terminal, file.getParent()); editor.setRestricted(true); - editor.open(Collections.singletonList(file.getName())); + editor.open(Collections.singletonList(file.getFileName().toString())); editor.run(); - try (BufferedReader br = new BufferedReader(new FileReader(file))) { + try (BufferedReader br = Files.newBufferedReader(file)) { String line; commandsBuffer.clear(); while ((line = br.readLine()) != null) { @@ -3529,7 +3528,7 @@ protected boolean viPutAfter() { buf.move(1); putString(yankBuffer); buf.move(-yankBuffer.length()); - } else if (yankBuffer.length() != 0) { + } else if (!yankBuffer.isEmpty()) { if (buf.cursor() < buf.length()) { buf.move(1); } @@ -3547,7 +3546,7 @@ protected boolean viPutBefore() { ; putString(yankBuffer); buf.move(-yankBuffer.length()); - } else if (yankBuffer.length() != 0) { + } else if (!yankBuffer.isEmpty()) { if (buf.cursor() > 0) { buf.move(-1); } From 451de9cb2d3d87cd5e9d372ce5be0c04239bfd17 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 10 Dec 2024 18:01:53 +0100 Subject: [PATCH 4/4] Fix --- builtins/src/main/java/org/jline/builtins/Less.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/Less.java b/builtins/src/main/java/org/jline/builtins/Less.java index 1c922d04c..b844209ca 100644 --- a/builtins/src/main/java/org/jline/builtins/Less.java +++ b/builtins/src/main/java/org/jline/builtins/Less.java @@ -840,7 +840,7 @@ private void addFile() throws IOException, InterruptedException { while (true) { checkInterrupted(); Operation op = bindingReader.readBinding(fileKeyMap); - if (Objects.requireNonNull(op) == Operation.ACCEPT) { + if (op == Operation.ACCEPT) { String name = buffer.substring(begPos); addSource(name); try { @@ -849,7 +849,7 @@ private void addFile() throws IOException, InterruptedException { ssp.restore(name); } return; - } else { + } else if (op != null) { curPos = lineEditor.editBuffer(op, curPos); } if (curPos > begPos) {