diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-26 09:20:14 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-26 09:20:14 -0800 |
commit | 39f38d4fd354ec70d4dcaf52a8804c8143b1c3f0 (patch) | |
tree | 24edca9345f5b46e436d7bfd0d1e14714abf73b2 /core/src/main | |
parent | 4306f94c080f48bb8e4333af06ea8bc158beb219 (diff) | |
download | mill-39f38d4fd354ec70d4dcaf52a8804c8143b1c3f0.tar.gz mill-39f38d4fd354ec70d4dcaf52a8804c8143b1c3f0.tar.bz2 mill-39f38d4fd354ec70d4dcaf52a8804c8143b1c3f0.zip |
Refactor `build.sc` to pull out common `ScalaModule` code into a separate trait
Also workaround a few scala-reflect bugs in `Discovered` and `Router` that were making this not-work
Diffstat (limited to 'core/src/main')
-rw-r--r-- | core/src/main/scala/mill/discover/Discovered.scala | 9 | ||||
-rw-r--r-- | core/src/main/scala/mill/discover/Router.scala | 2 |
2 files changed, 7 insertions, 4 deletions
diff --git a/core/src/main/scala/mill/discover/Discovered.scala b/core/src/main/scala/mill/discover/Discovered.scala index e3939d5b..aef5f14f 100644 --- a/core/src/main/scala/mill/discover/Discovered.scala +++ b/core/src/main/scala/mill/discover/Discovered.scala @@ -36,7 +36,7 @@ object Discovered { def applyImpl[T: c.WeakTypeTag](c: Context): c.Expr[Discovered[T]] = { import c.universe._ - val tpe = c.weakTypeTag[T].tpe + val baseType = c.weakTypeTag[T].tpe def rec(segments: List[Option[String]], t: c.Type): Tree = { @@ -77,6 +77,7 @@ object Discovered { q"($name, ${rec(Some(name) :: segments, m.typeSignature.finalResultType)})" } + val crossName = q"${TermName(c.freshName())}" val hierarchySelector = { val base = q"${TermName(c.freshName())}" @@ -84,7 +85,7 @@ object Discovered { case (prefix, (Some(name), i)) => q"$prefix.${TermName(name)}" case (prefix, (None, i)) => q"$prefix.apply($crossName($i):_*)" } - q"($base: $tpe, $crossName: List[List[Any]]) => $ident" + q"($base: $baseType, $crossName: List[List[Any]]) => $ident.asInstanceOf[$t]" } val commands = @@ -92,7 +93,7 @@ object Discovered { .asInstanceOf[Seq[c.Tree]] .toList - q"""mill.discover.Mirror[$tpe, $t]( + q"""mill.discover.Mirror[$baseType, $t]( $hierarchySelector, $commands, $targets, @@ -101,7 +102,7 @@ object Discovered { )""" } - val res = q"new _root_.mill.discover.Discovered(${rec(Nil, tpe)})" + val res = q"new _root_.mill.discover.Discovered(${rec(Nil, baseType)})" // println(res) c.Expr[Discovered[T]](res) } diff --git a/core/src/main/scala/mill/discover/Router.scala b/core/src/main/scala/mill/discover/Router.scala index dda682b2..90e83430 100644 --- a/core/src/main/scala/mill/discover/Router.scala +++ b/core/src/main/scala/mill/discover/Router.scala @@ -264,7 +264,9 @@ class Router [C <: Context](val c: C) { if member.isTerm memTerm = member.asTerm if memTerm.isMethod + if !memTerm.isModule } yield memTerm.asMethod + extractableMembers flatMap { case memTerm => if (memTerm.isSetter || memTerm.isConstructor || memTerm.isGetter) Nil else Seq(memTerm) |