summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorRoman Timushev <rtimush@gmail.com>2017-12-25 03:21:10 +0100
committerLi Haoyi <haoyi.sg@gmail.com>2017-12-24 18:21:10 -0800
commit4181484c6a3674788e1a57f4d4d1fe28ffabbce3 (patch)
treead5afb4a2456cb502dccfc0b93f8f9bdcd885855 /core
parentd288158e746a5350bb104f0b57abbe8f83485845 (diff)
downloadmill-4181484c6a3674788e1a57f4d4d1fe28ffabbce3.tar.gz
mill-4181484c6a3674788e1a57f4d4d1fe28ffabbce3.tar.bz2
mill-4181484c6a3674788e1a57f4d4d1fe28ffabbce3.zip
Allow Target creation from Result[T] (#79)
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/mill/define/Task.scala11
-rw-r--r--core/src/test/scala/mill/define/CacherTests.scala7
2 files changed, 17 insertions, 1 deletions
diff --git a/core/src/main/scala/mill/define/Task.scala b/core/src/main/scala/mill/define/Task.scala
index 17392725..71a98fa7 100644
--- a/core/src/main/scala/mill/define/Task.scala
+++ b/core/src/main/scala/mill/define/Task.scala
@@ -40,7 +40,7 @@ object Target extends Applicative.Applyer[Task, Task, Result, Ctx]{
implicit def apply[T](t: T): Target[T] = macro targetImpl[T]
- implicit def apply[T](t: Result[T]): Target[T] = macro targetImpl[T]
+ implicit def apply[T](t: Result[T]): Target[T] = macro targetResultImpl[T]
def apply[T](t: Task[T]): Target[T] = macro targetTaskImpl[T]
@@ -88,6 +88,15 @@ object Target extends Applicative.Applyer[Task, Task, Result, Ctx]{
)
}
+ def targetResultImpl[T: c.WeakTypeTag](c: Context)(t: c.Expr[Result[T]]): c.Expr[Target[T]] = {
+ import c.universe._
+ c.Expr[Target[T]](
+ mill.plugin.Cacher.wrapCached(c)(
+ q"new ${weakTypeOf[TargetImpl[T]]}(${Applicative.impl0[Task, T, Ctx](c)(t.tree).tree}, _root_.sourcecode.Enclosing())"
+ )
+ )
+ }
+
def underlying[A](v: Task[A]) = v
def mapCtx[A, B](t: Task[A])(f: (A, Ctx) => Result[B]) = t.mapDest(f)
def zip() = new Task.Task0(())
diff --git a/core/src/test/scala/mill/define/CacherTests.scala b/core/src/test/scala/mill/define/CacherTests.scala
index 4e647f82..fe8e1b89 100644
--- a/core/src/test/scala/mill/define/CacherTests.scala
+++ b/core/src/test/scala/mill/define/CacherTests.scala
@@ -4,6 +4,7 @@ import mill.discover.Discovered
import mill.eval.Evaluator
import mill.util.{DummyLogger, OSet}
import mill.T
+import mill.eval.Result.Success
import utest._
import utest.framework.TestPath
@@ -11,6 +12,7 @@ object CacherTests extends TestSuite{
object Base extends Base
trait Base extends Task.Module{
def value = T{ 1 }
+ def result = T{ Success(1) }
}
object Middle extends Middle
trait Middle extends Base{
@@ -36,6 +38,11 @@ object CacherTests extends TestSuite{
eval(Discovered.mapping(Base), Base.value) == 1
)
+ 'resultDefIsCached - assert(
+ Base.result eq Base.result,
+ eval(Discovered.mapping(Base), Base.result) == 1
+ )
+
val middleMapping = Discovered.mapping(Middle)
'overridingDefIsAlsoCached - assert(