sbt/util/control/ErrorHandling.scala

28 lines
740 B
Scala
Raw Normal View History

2010-02-08 05:45:19 +01:00
/* sbt -- Simple Build Tool
* Copyright 2009 Mark Harrah
*/
package sbt
2009-08-16 20:29:08 +02:00
object ErrorHandling
{
def translate[T](msg: => String)(f: => T) =
try { f }
catch { case e: Exception => throw new TranslatedException(msg + e.toString, e) }
2009-08-16 20:29:08 +02:00
def wideConvert[T](f: => T): Either[Throwable, T] =
try { Right(f) }
catch
{
case ex @ (_: Exception | _: StackOverflowError) => Left(ex)
case err @ (_: ThreadDeath | _: VirtualMachineError) => throw err
case x => Left(x)
}
2009-08-16 20:29:08 +02:00
def convert[T](f: => T): Either[Exception, T] =
try { Right(f) }
catch { case e: Exception => Left(e) }
}
final class TranslatedException private[sbt](msg: String, cause: Throwable) extends RuntimeException(msg, cause)
2009-08-16 20:29:08 +02:00
{
override def toString = msg
}