From 43748c7ad60f45b03a4b29ea40deb9e396d54680 Mon Sep 17 00:00:00 2001 From: mattirn Date: Fri, 24 Apr 2020 17:50:19 +0200 Subject: [PATCH] GroovyCommand: added command console & inspect command option --gui --- .../jline/builtins/SystemRegistryImpl.java | 3 +- demo/pom.xml | 5 + demo/src/main/java/org/jline/demo/Repl.java | 13 +++ groovy/pom.xml | 5 + .../java/org/jline/script/GroovyCommand.java | 102 ++++++++++++++---- pom.xml | 8 +- 6 files changed, 113 insertions(+), 23 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/SystemRegistryImpl.java b/builtins/src/main/java/org/jline/builtins/SystemRegistryImpl.java index 8f0a2fe2b..3cdb60d7b 100644 --- a/builtins/src/main/java/org/jline/builtins/SystemRegistryImpl.java +++ b/builtins/src/main/java/org/jline/builtins/SystemRegistryImpl.java @@ -1234,7 +1234,8 @@ public void trace(boolean stack, Exception exception) { String message = exception.getMessage(); AttributedStringBuilder asb = new AttributedStringBuilder(); if (message != null) { - asb.append(message, AttributedStyle.DEFAULT.foreground(AttributedStyle.RED)); + String m = exception.getClass().getSimpleName() + ": " + message; + asb.append(m, AttributedStyle.DEFAULT.foreground(AttributedStyle.RED)); } else { asb.append("Caught exception: ", AttributedStyle.DEFAULT.foreground(AttributedStyle.RED)); asb.append(exception.getClass().getCanonicalName(), AttributedStyle.DEFAULT.foreground(AttributedStyle.RED)); diff --git a/demo/pom.xml b/demo/pom.xml index 8693fed68..2aaa185a4 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -83,6 +83,11 @@ groovy-json + + org.codehaus.groovy + groovy-console + + org.slf4j slf4j-api diff --git a/demo/src/main/java/org/jline/demo/Repl.java b/demo/src/main/java/org/jline/demo/Repl.java index 7b58314f5..d33fa7680 100644 --- a/demo/src/main/java/org/jline/demo/Repl.java +++ b/demo/src/main/java/org/jline/demo/Repl.java @@ -54,6 +54,7 @@ import org.jline.terminal.Terminal.Signal; import org.jline.utils.InfoCmp; import org.jline.utils.InfoCmp.Capability; + import org.jline.utils.OSUtils; /** @@ -383,6 +384,18 @@ public static void main(String[] args) { } } systemRegistry.close(); // persist pipeline completer names etc + + Set threadSet = Thread.getAllStackTraces().keySet(); + boolean groovyRunning=false; // check Groovy GUI apps + for (Thread t : threadSet) { + if (t.getName().startsWith("AWT-Shut")) { + groovyRunning = true; + break; + } + } + if (groovyRunning) { + consoleEngine.println("Please, close Groovy Consoles/Object Browsers!"); + } } catch (Throwable t) { t.printStackTrace(); diff --git a/groovy/pom.xml b/groovy/pom.xml index cfefe0be0..256355d49 100644 --- a/groovy/pom.xml +++ b/groovy/pom.xml @@ -32,6 +32,11 @@ org.codehaus.groovy groovy-json + + org.codehaus.groovy + groovy-console + true + junit junit diff --git a/groovy/src/main/java/org/jline/script/GroovyCommand.java b/groovy/src/main/java/org/jline/script/GroovyCommand.java index 788f9d34e..249421297 100644 --- a/groovy/src/main/java/org/jline/script/GroovyCommand.java +++ b/groovy/src/main/java/org/jline/script/GroovyCommand.java @@ -29,12 +29,16 @@ import org.jline.reader.impl.completer.StringsCompleter; import org.jline.utils.AttributedString; +import groovy.console.ui.Console; +import groovy.console.ui.ObjectBrowser; + public class GroovyCommand extends AbstractCommandRegistry implements CommandRegistry { - public enum Command {INSPECT} + public enum Command {INSPECT, CONSOLE} private GroovyEngine engine; private Printer printer; private final Map commandDescs = new HashMap<>(); private final Map> commandInfos = new HashMap<>(); + private boolean consoleUi; public GroovyCommand(GroovyEngine engine, Printer printer) { this(null, engine, printer); @@ -43,6 +47,11 @@ public GroovyCommand(GroovyEngine engine, Printer printer) { public GroovyCommand(Set commands, GroovyEngine engine, Printer printer) { this.engine = engine; this.printer = printer; + try { + Class.forName("groovy.console.ui.ObjectBrowser"); + consoleUi = true; + } catch (Exception e) { + } Set cmds = new HashSet<>(); Map commandName = new HashMap<>(); Map commandExecute = new HashMap<>(); @@ -51,12 +60,17 @@ public GroovyCommand(Set commands, GroovyEngine engine, Printer printer } else { cmds = new HashSet<>(commands); } + if (!consoleUi) { + cmds.remove(Command.CONSOLE); + } for (Command c: cmds) { commandName.put(c, c.name().toLowerCase()); } commandExecute.put(Command.INSPECT, new CommandMethods(this::inspect, this::inspectCompleter)); + commandExecute.put(Command.CONSOLE, new CommandMethods(this::console, this::consoleCompleter)); registerCommands(commandName, commandExecute); commandDescs.put(Command.INSPECT, inspectCmdDesc()); + commandDescs.put(Command.CONSOLE, consoleCmdDesc()); } @Override @@ -71,6 +85,23 @@ public CmdDesc commandDescription(String command) { return commandDescs.get(cmd); } + public void console(CommandInput input) { + if (input.args().length > 1) { + throw new IllegalArgumentException("Wrong number of command parameters: " + input.args().length); + } + if (input.args().length == 1) { + String arg = input.args()[0]; + if (arg.equals("-?") || arg.equals("--help")) { + printer.println(commandDescs.get(Command.CONSOLE)); + return; + } else { + throw new IllegalArgumentException("Unknown command parameter: " + input.args()[0]); + } + } + Console c = new Console(); + c.run(); + } + public Object inspect(CommandInput input) { if (input.xargs().length == 0) { return null; @@ -91,33 +122,53 @@ public Object inspect(CommandInput input) { if (input.args().length < id + 1) { throw new IllegalArgumentException("Wrong number of command parameters: " + input.args().length); } - Object obj = input.xargs()[id]; - ObjectInspector inspector = new ObjectInspector(obj); - Object out = option; - if (option.equals("-m") || option.equals("--methods")) { - out = inspector.methods(); - } else if (option.equals("-n") || option.equals("--metaMethods")) { - out = inspector.metaMethods(); - } else if (option.equals("-i") || option.equals("--info")) { - out = inspector.properties(); - } else if (option.equals("-g") || option.equals("--gui")) { -// groovy.inspect.swingui.ObjectBrowser.inspect(obj); - } else { - throw new IllegalArgumentException("Unknown option: " + option); + try { + Object obj = input.xargs()[id]; + ObjectInspector inspector = new ObjectInspector(obj); + Object out = option; + if (option.equals("-m") || option.equals("--methods")) { + out = inspector.methods(); + } else if (option.equals("-n") || option.equals("--metaMethods")) { + out = inspector.metaMethods(); + } else if (option.equals("-i") || option.equals("--info")) { + out = inspector.properties(); + } else if (consoleUi && (option.equals("-g") || option.equals("--gui"))) { + ObjectBrowser.inspect(obj); + } else { + throw new IllegalArgumentException("Unknown option: " + option); + } + Map options = new HashMap<>(); + options.put(Printer.SKIP_DEFAULT_OPTIONS, true); + options.put(Printer.COLUMNS, ObjectInspector.METHOD_COLUMNS); + options.put(Printer.MAX_DEPTH, 1); + options.put(Printer.INDENTION, 4); + printer.println(options, out); + } catch (Exception e) { + saveException(e); } - Map options = new HashMap<>(); - options.put(Printer.SKIP_DEFAULT_OPTIONS, true); - options.put(Printer.COLUMNS, ObjectInspector.METHOD_COLUMNS); - options.put(Printer.MAX_DEPTH, 1); - options.put(Printer.INDENTION, 4); - printer.println(options, out); return null; } + private CmdDesc consoleCmdDesc() { + Map> optDescs = new HashMap<>(); + optDescs.put("-? --help", doDescription ("Displays command help")); + CmdDesc out = new CmdDesc(new ArrayList<>(), optDescs); + List mainDesc = new ArrayList<>(); + List info = new ArrayList<>(); + info.add("Launch Groovy console"); + commandInfos.put(Command.CONSOLE, info); + mainDesc.add(new AttributedString("console - " + info.get(0))); + mainDesc.add(new AttributedString("Usage: console")); + out.setMainDesc(mainDesc); + return out; + } + private CmdDesc inspectCmdDesc() { Map> optDescs = new HashMap<>(); optDescs.put("-? --help", doDescription ("Displays command help")); - optDescs.put("-g --gui", doDescription ("Open object browser")); + if (consoleUi) { + optDescs.put("-g --gui", doDescription ("Launch object browser")); + } optDescs.put("-i --info", doDescription ("Object class info")); optDescs.put("-m --methods", doDescription ("List object methods")); optDescs.put("-n --metaMethods", doDescription ("List object metaMethads")); @@ -167,4 +218,13 @@ public List inspectCompleter(String command) { out.add(ac); return out; } + + public List consoleCompleter(String command) { + List out = new ArrayList<>(); + ArgumentCompleter ac = new ArgumentCompleter(NullCompleter.INSTANCE + , new StringsCompleter("--help", "-?") + , NullCompleter.INSTANCE); + out.add(ac); + return out; + } } diff --git a/pom.xml b/pom.xml index 98742a4d6..a2a868184 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ 1.1.4 1.7.21 3.0.2 - 3.0.2 + 3.0.3 @@ -239,6 +239,12 @@ ${groovy.version} + + org.codehaus.groovy + groovy-console + ${groovy.version} + + org.slf4j slf4j-api