summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-01 17:47:08 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-01 17:47:44 -0800
commit6074133396839db40e37aa3c0935edf875d4beba (patch)
treed9bfb61e7201c3d77a1f1bbad21f29f7a021e31c /core
parente1241f1da8e55cfba3286c438ac26e4d09df63ff (diff)
downloadmill-6074133396839db40e37aa3c0935edf875d4beba.tar.gz
mill-6074133396839db40e37aa3c0935edf875d4beba.tar.bz2
mill-6074133396839db40e37aa3c0935edf875d4beba.zip
Fix `idea` project generation, and make `Result.Exception` display the offending stack trace so they're easier to debug
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/mill/eval/Evaluator.scala6
-rw-r--r--core/src/main/scala/mill/eval/Result.scala4
-rw-r--r--core/src/main/scala/mill/main/RunScript.scala5
-rw-r--r--core/src/test/scala/mill/eval/JavaCompileJarTests.scala2
-rw-r--r--core/src/test/scala/mill/util/TestUtil.scala2
5 files changed, 10 insertions, 9 deletions
diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala
index e9b34204..5aa3439c 100644
--- a/core/src/main/scala/mill/eval/Evaluator.scala
+++ b/core/src/main/scala/mill/eval/Evaluator.scala
@@ -214,9 +214,9 @@ class Evaluator[T](val workspacePath: Path,
target.evaluate(args)
}
}
- }catch{
- case NonFatal(e) =>
- Result.Exception(e)
+ }catch{ case NonFatal(e) =>
+ val currentStack = new Exception().getStackTrace
+ Result.Exception(e, currentStack)
}finally{
System.setErr(err)
System.setOut(out)
diff --git a/core/src/main/scala/mill/eval/Result.scala b/core/src/main/scala/mill/eval/Result.scala
index e0cc18bb..a9b2c70b 100644
--- a/core/src/main/scala/mill/eval/Result.scala
+++ b/core/src/main/scala/mill/eval/Result.scala
@@ -4,11 +4,11 @@ sealed trait Result[+T]
object Result{
implicit def create[T](t: => T): Result[T] = {
try Success(t)
- catch { case e: Throwable => Exception(e) }
+ catch { case e: Throwable => Exception(e, new java.lang.Exception().getStackTrace) }
}
case class Success[T](value: T) extends Result[T]
case object Skipped extends Result[Nothing]
sealed trait Failing extends Result[Nothing]
case class Failure(msg: String) extends Failing
- case class Exception(throwable: Throwable) extends Failing
+ case class Exception(throwable: Throwable, outerStack: Seq[StackTraceElement]) extends Failing
} \ No newline at end of file
diff --git a/core/src/main/scala/mill/main/RunScript.scala b/core/src/main/scala/mill/main/RunScript.scala
index 53347fd6..34a569fb 100644
--- a/core/src/main/scala/mill/main/RunScript.scala
+++ b/core/src/main/scala/mill/main/RunScript.scala
@@ -1,6 +1,6 @@
package mill.main
-import java.io.PrintStream
+import java.io.{ByteArrayOutputStream, PrintStream}
import java.nio.file.NoSuchFileException
import ammonite.interp.Interpreter
@@ -127,7 +127,8 @@ object RunScript{
case Right(t) => Mirror.renderSelector(t.segments.toList)
}
val fss = fs.map{
- case Result.Exception(t) => t.toString
+ case Result.Exception(t, outerStack) =>
+ t.toString + t.getStackTrace.dropRight(outerStack.length).map("\n " + _).mkString
case Result.Failure(t) => t
}
s"$ks ${fss.mkString(", ")}"
diff --git a/core/src/test/scala/mill/eval/JavaCompileJarTests.scala b/core/src/test/scala/mill/eval/JavaCompileJarTests.scala
index 95ad6669..5ddbb68e 100644
--- a/core/src/test/scala/mill/eval/JavaCompileJarTests.scala
+++ b/core/src/test/scala/mill/eval/JavaCompileJarTests.scala
@@ -149,7 +149,7 @@ object JavaCompileJarTests extends TestSuite{
)
}
- val Left(Result.Exception(ex)) = eval(Build.run("test.BarFour"))
+ val Left(Result.Exception(ex, _)) = eval(Build.run("test.BarFour"))
assert(ex.getMessage.contains("Could not find or load main class"))
diff --git a/core/src/test/scala/mill/util/TestUtil.scala b/core/src/test/scala/mill/util/TestUtil.scala
index 0457431b..b1e37481 100644
--- a/core/src/test/scala/mill/util/TestUtil.scala
+++ b/core/src/test/scala/mill/util/TestUtil.scala
@@ -25,7 +25,7 @@ object TestUtil {
var exception = Option.empty[Throwable]
override def evaluate(args: Ctx) = {
failure.map(Result.Failure) orElse
- exception.map(Result.Exception) getOrElse
+ exception.map(Result.Exception(_, Nil)) getOrElse
Result.Success(counter + args.args.map(_.asInstanceOf[Int]).sum)
}
override def sideHash = counter + failure.hashCode() + exception.hashCode()