summaryrefslogtreecommitdiff
path: root/core/src/main/scala/mill/define/Module.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/scala/mill/define/Module.scala')
-rw-r--r--core/src/main/scala/mill/define/Module.scala9
1 files changed, 9 insertions, 0 deletions
diff --git a/core/src/main/scala/mill/define/Module.scala b/core/src/main/scala/mill/define/Module.scala
index c9240fa0..064741c4 100644
--- a/core/src/main/scala/mill/define/Module.scala
+++ b/core/src/main/scala/mill/define/Module.scala
@@ -4,6 +4,7 @@ import ammonite.main.Router.Overrides
import ammonite.ops.Path
import scala.annotation.implicitNotFound
+import scala.reflect.ClassTag
sealed trait Segment
object Segment{
@@ -55,6 +56,14 @@ class Module(implicit ctx0: Module.Ctx) extends mill.moduledefs.Cacher{
implicit def millModuleSegments: Segments = {
ctx.segments0 ++ Seq(ctx.segment)
}
+ def reflect[T: ClassTag] = {
+ this
+ .getClass
+ .getMethods
+ .filter(_.getParameterCount == 0)
+ .filter(implicitly[ClassTag[T]].runtimeClass isAssignableFrom _.getReturnType)
+ .map(_.invoke(this).asInstanceOf[T])
+ }
}
object Module{
@implicitNotFound("Modules, Targets and Commands can only be defined within a mill Module")