You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2018/09/22 16:38:37 UTC

groovy git commit: GROOVY-8808: Add DGM `Throwable.asString` (closes #800)

Repository: groovy
Updated Branches:
  refs/heads/master f84448476 -> 10c968513


GROOVY-8808: Add DGM `Throwable.asString` (closes #800)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/10c96851
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/10c96851
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/10c96851

Branch: refs/heads/master
Commit: 10c9685131b74bc634f26fc17a1907ceb3ea7f47
Parents: f844484
Author: Daniel Sun <su...@apache.org>
Authored: Sun Sep 23 00:38:28 2018 +0800
Committer: Daniel Sun <su...@apache.org>
Committed: Sun Sep 23 00:38:28 2018 +0800

----------------------------------------------------------------------
 .../groovy/runtime/DefaultGroovyMethods.java      | 18 ++++++++++++++++++
 .../runtime/DefaultGroovyMethodsTest.groovy       |  7 +++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/10c96851/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index d54e405..32ea174 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -54,6 +54,7 @@ import groovy.util.MapEntry;
 import groovy.util.OrderBy;
 import groovy.util.PermutationGenerator;
 import groovy.util.ProxyGenerator;
+import org.apache.groovy.io.StringBuilderWriter;
 import org.codehaus.groovy.classgen.Verifier;
 import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.reflection.MixinInMetaClass;
@@ -17822,4 +17823,21 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
     public static <T> T asType(CharSequence self, Class<T> c) {
         return StringGroovyMethods.asType(self, c);
     }
+
+    /**
+     * Get the detail information of {@link Throwable} instance's stack trace
+     *
+     * @param self a Throwable instance
+     * @return the detail information of stack trace
+     * @since 2.5.3
+     */
+    public static String asString(Throwable self) {
+        StringBuilderWriter sw = new StringBuilderWriter();
+
+        try (PrintWriter pw = new PrintWriter(sw)) {
+            self.printStackTrace(pw);
+        }
+
+        return sw.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/10c96851/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy b/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
index a29ad91..960594a 100644
--- a/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
+++ b/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.groovy
@@ -312,4 +312,11 @@ class DefaultGroovyMethodsTest extends GroovyTestCase {
         assert DefaultGroovyMethods.getLocation(org.objectweb.asm.Opcodes).getFile().matches(/(.+\/)?asm[-].+\.jar/)
         assert null == DefaultGroovyMethods.getLocation(String)
     }
+
+    void testThrowableAsString() {
+        def result = new Exception("this is an exception").asString()
+
+        assert result.contains("this is an exception")
+        assert result.contains("at org.codehaus.groovy.runtime.DefaultGroovyMethodsTest.testThrowableAsString(DefaultGroovyMethodsTest.groovy:")
+    }
 }