summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-08-18 18:51:58 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-08-19 09:36:54 +0200
commita3735fdbbf93128874d93da5c69af0f777220313 (patch)
treeb4f3684e98da1391c6d2ba38c308e75fad684c89 /src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala
parentac430ac8ba554d1b976d44598400d95ce5cf3816 (diff)
downloadscala-a3735fdbbf93128874d93da5c69af0f777220313.tar.gz
scala-a3735fdbbf93128874d93da5c69af0f777220313.tar.bz2
scala-a3735fdbbf93128874d93da5c69af0f777220313.zip
pull request feedback
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala
index 99ce22ddb9..773d9a6f50 100644
--- a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala
@@ -12,6 +12,8 @@ import symtab.Flags.{ PRIVATE, PROTECTED, IS_ERROR }
import scala.compat.Platform.EOL
import scala.reflect.runtime.ReflectionUtils
import scala.reflect.macros.runtime.AbortMacroException
+import scala.util.control.NonFatal
+import scala.tools.nsc.util.stackTraceString
trait ContextErrors {
self: Analyzer =>
@@ -687,13 +689,14 @@ trait ContextErrors {
relevantElements = relevantElements dropRight threshold
realex.setStackTrace(relevantElements)
- val message = new java.io.StringWriter()
- realex.printStackTrace(new java.io.PrintWriter(message))
- Some(EOL + message)
+ Some(EOL + stackTraceString(realex))
}
} catch {
// if the magic above goes boom, just fall back to uninformative, but better than nothing, getMessage
- case ex: Throwable =>
+ case NonFatal(ex) =>
+ macroLogVerbose("got an exception when processing a macro generated exception\n" +
+ "offender = " + stackTraceString(realex) + "\n" +
+ "error = " + stackTraceString(ex))
None
}
} getOrElse {