summaryrefslogtreecommitdiff
path: root/core/src/main/scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-26 09:20:14 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-26 09:20:14 -0800
commit39f38d4fd354ec70d4dcaf52a8804c8143b1c3f0 (patch)
tree24edca9345f5b46e436d7bfd0d1e14714abf73b2 /core/src/main/scala
parent4306f94c080f48bb8e4333af06ea8bc158beb219 (diff)
downloadmill-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/scala')
-rw-r--r--core/src/main/scala/mill/discover/Discovered.scala9
-rw-r--r--core/src/main/scala/mill/discover/Router.scala2
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)