You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/08/04 06:01:24 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-6843: Remove GroovyDoc
JANSI dependency (closes #1336)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new 0cf72b1 GROOVY-6843: Remove GroovyDoc JANSI dependency (closes #1336)
0cf72b1 is described below
commit 0cf72b1b38113e5d3510efc44a8160a54ff59582
Author: Paul King <pa...@asert.com.au>
AuthorDate: Mon Aug 3 12:35:59 2020 +1000
GROOVY-6843: Remove GroovyDoc JANSI dependency (closes #1336)
---
.../java/org/codehaus/groovy/tools/shell/IO.java | 80 +++++++++++++++++-----
.../codehaus/groovy/tools/shell/util/Logger.java | 23 +++++--
2 files changed, 78 insertions(+), 25 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/tools/shell/IO.java b/src/main/java/org/codehaus/groovy/tools/shell/IO.java
index 5d7459c..efe790b 100644
--- a/src/main/java/org/codehaus/groovy/tools/shell/IO.java
+++ b/src/main/java/org/codehaus/groovy/tools/shell/IO.java
@@ -18,8 +18,8 @@
*/
package org.codehaus.groovy.tools.shell;
+import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.tools.shell.util.Preferences;
-import org.fusesource.jansi.AnsiRenderWriter;
import java.io.Closeable;
import java.io.IOException;
@@ -32,27 +32,45 @@ import java.io.Reader;
/**
* Container for input/output handles.
*/
-public class IO implements Closeable
-{
- /** Raw input stream. */
+public class IO implements Closeable {
+ private static final String ANSI_RENDER_WRITER = "org.fusesource.jansi.AnsiRenderWriter";
+
+ /**
+ * Raw input stream.
+ */
public final InputStream inputStream;
- /** Raw output stream. */
+ /**
+ * Raw output stream.
+ */
public final OutputStream outputStream;
- /** Raw error output stream. */
+ /**
+ * Raw error output stream.
+ */
public final OutputStream errorStream;
- /** Prefered input reader. */
+ /**
+ * Preferred input reader.
+ */
public final Reader in;
- /** Prefered output writer. */
+ /**
+ * Preferred output writer.
+ */
public final PrintWriter out;
- /** Prefered error output writer. */
+ /**
+ * Preferred error output writer.
+ */
public final PrintWriter err;
/**
+ * Whether ansi support is available
+ */
+ public final boolean ansiSupported;
+
+ /**
* Construct a new IO container.
*/
public IO(final InputStream inputStream, final OutputStream outputStream, final OutputStream errorStream) {
@@ -65,8 +83,36 @@ public class IO implements Closeable
this.errorStream = errorStream;
this.in = new InputStreamReader(inputStream);
- this.out = new AnsiRenderWriter(outputStream, true);
- this.err = new AnsiRenderWriter(errorStream, true);
+ boolean ansiSupported = false;
+ try {
+ Class.forName(ANSI_RENDER_WRITER, false, IO.class.getClassLoader());
+ ansiSupported = true;
+ } catch (ClassNotFoundException ignore) {
+ }
+ this.ansiSupported = ansiSupported;
+ PrintWriter out = null;
+ PrintWriter err = null;
+ if (ansiSupported) {
+ out = tryConstructRenderWriter(outputStream);
+ err = tryConstructRenderWriter(errorStream);
+ }
+ if (out == null) {
+ out = new PrintWriter(outputStream, true);
+ }
+ if (err == null) {
+ err = new PrintWriter(errorStream, true);
+ }
+ this.out = out;
+ this.err = err;
+ }
+
+ protected PrintWriter tryConstructRenderWriter(OutputStream stream) {
+ // load via reflection to avoid hard-coded dependency on jansi jar
+ try {
+ return (PrintWriter) InvokerHelper.invokeConstructorOf(ANSI_RENDER_WRITER, new Object[]{stream, true});
+ } catch (ClassNotFoundException ignore) {
+ return null;
+ }
}
/**
@@ -78,8 +124,6 @@ public class IO implements Closeable
/**
* Set the verbosity level.
- *
- * @param verbosity
*/
public void setVerbosity(final Verbosity verbosity) {
assert verbosity != null;
@@ -142,12 +186,10 @@ public class IO implements Closeable
err.close();
}
- //
- // Verbosity
- //
-
- public static final class Verbosity
- {
+ /**
+ * Verbosity for simple logging: QUIET, INFO, VERBOSE, DEBUG
+ */
+ public static final class Verbosity {
public static final Verbosity QUIET = new Verbosity("QUIET");
public static final Verbosity INFO = new Verbosity("INFO");
diff --git a/src/main/java/org/codehaus/groovy/tools/shell/util/Logger.java b/src/main/java/org/codehaus/groovy/tools/shell/util/Logger.java
index 61fe230..4fdf9fa 100644
--- a/src/main/java/org/codehaus/groovy/tools/shell/util/Logger.java
+++ b/src/main/java/org/codehaus/groovy/tools/shell/util/Logger.java
@@ -58,20 +58,31 @@ public final class Logger {
}
}
- Color color = GREEN;
- if (WARN.equals(level) || ERROR.equals(level)) {
- color = RED;
+ if (io.ansiSupported) {
+ logWithAnsi(level, msg);
+ } else {
+ logDefault(level, msg);
}
- io.out.println(ansi().a(INTENSITY_BOLD).fg(color).a(level).reset().a(" [").a(name).a("] ").a(msg));
-
if (cause != null) {
cause.printStackTrace(io.out);
}
io.flush();
}
-
+
+ private void logDefault(String level, Object msg) {
+ io.out.println(level + " [" + name + "] " + msg);
+ }
+
+ private void logWithAnsi(String level, Object msg) {
+ Color color = GREEN;
+ if (WARN.equals(level) || ERROR.equals(level)) {
+ color = RED;
+ }
+ io.out.println(ansi().a(INTENSITY_BOLD).fg(color).a(level).reset().a(" [").a(name).a("] ").a(msg));
+ }
+
//
// Level helpers
//