diff options
Diffstat (limited to 'core/src/main/scala/mill/define/Module.scala')
-rw-r--r-- | core/src/main/scala/mill/define/Module.scala | 9 |
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") |