diff options
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/main/scala/mill/define/Cross.scala | 3 | ||||
-rw-r--r-- | core/src/main/scala/mill/discover/Discovered.scala | 3 | ||||
-rw-r--r-- | core/src/main/scala/mill/package.scala | 1 |
3 files changed, 6 insertions, 1 deletions
diff --git a/core/src/main/scala/mill/define/Cross.scala b/core/src/main/scala/mill/define/Cross.scala index 85341d12..55d7b59c 100644 --- a/core/src/main/scala/mill/define/Cross.scala +++ b/core/src/main/scala/mill/define/Cross.scala @@ -25,3 +25,6 @@ case class Cross[+T](items: List[(List[Any], T)]){ object Cross{ def apply[T](t: T*) = new Cross(t.map(i => List(i) -> i).toList) } + +class CrossModule[T, V](constructor: T => V, cases: T*) +extends Cross[V](cases.toList.map(x => (List(x), constructor(x))))
\ No newline at end of file diff --git a/core/src/main/scala/mill/discover/Discovered.scala b/core/src/main/scala/mill/discover/Discovered.scala index cef0d193..9528a310 100644 --- a/core/src/main/scala/mill/discover/Discovered.scala +++ b/core/src/main/scala/mill/discover/Discovered.scala @@ -98,7 +98,8 @@ object Discovered { val crossChildren = if (!(t <:< c.weakTypeOf[Cross[Module]])) q"None" else { - val TypeRef(_, _, Seq(arg)) = t + + val TypeRef(_, _, Seq(arg)) = t.baseType(typeOf[Cross[Module]].typeSymbol) val innerMirror = rec(None :: segments, arg) q"Some(((c: mill.define.Cross[_]) => mill.discover.Discovered.tupleLeft(c.items), $innerMirror))" } diff --git a/core/src/main/scala/mill/package.scala b/core/src/main/scala/mill/package.scala index 7dcb83d8..b7332f9e 100644 --- a/core/src/main/scala/mill/package.scala +++ b/core/src/main/scala/mill/package.scala @@ -6,4 +6,5 @@ package object mill extends JsonFormatters{ val PathRef = mill.eval.PathRef type PathRef = mill.eval.PathRef type Module = define.Task.Module + type CrossModule[T, V] = define.CrossModule[T, V] } |