summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/util/package.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-11-05 07:05:01 -0800
committerPaul Phillips <paulp@improving.org>2012-11-09 16:48:32 -0700
commit3292c4a8473d51bfe6d35522196d094081152fd9 (patch)
treefc222a1001bc9837763f3f48e0e3bd4777b5cc02 /src/compiler/scala/tools/nsc/util/package.scala
parent8da7e37674d771e177445cc0c56eab7b7016c2f2 (diff)
downloadscala-3292c4a8473d51bfe6d35522196d094081152fd9.tar.gz
scala-3292c4a8473d51bfe6d35522196d094081152fd9.tar.bz2
scala-3292c4a8473d51bfe6d35522196d094081152fd9.zip
A utility function to summarize an exception.
Now when I start the repl and trigger an exception during initialization, it offers a one line message like: uncaught exception during compilation: AssertionError("assertion failed: (14,13)") @ scala.reflect.internal.Symbols$Symbol.updateInfo(Symbols.scala:1309) Which is a marked debugging improvement from RC1: uncaught exception during compilation: java.lang.AssertionError
Diffstat (limited to 'src/compiler/scala/tools/nsc/util/package.scala')
-rw-r--r--src/compiler/scala/tools/nsc/util/package.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/util/package.scala b/src/compiler/scala/tools/nsc/util/package.scala
index d34d4ee092..e9dcaa8e16 100644
--- a/src/compiler/scala/tools/nsc/util/package.scala
+++ b/src/compiler/scala/tools/nsc/util/package.scala
@@ -83,6 +83,18 @@ package object util {
}
def stackTraceString(ex: Throwable): String = stringFromWriter(ex printStackTrace _)
+ /** A one line string which contains the class of the exception, the
+ * message if any, and the first non-Predef location in the stack trace
+ * (to exclude assert, require, etc.)
+ */
+ def stackTraceHeadString(ex: Throwable): String = {
+ val frame = ex.getStackTrace.dropWhile(_.getClassName contains "Predef").head
+ val msg = ex.getMessage match { case null | "" => "" ; case s => s"""("$s")""" }
+ val clazz = ex.getClass.getName.split('.').last
+
+ s"$clazz$msg @ $frame"
+ }
+
lazy val trace = new SimpleTracer(System.out)
lazy val errtrace = new SimpleTracer(System.err)