diff --git a/main/define/src/mill/define/Reflect.scala b/main/define/src/mill/define/Reflect.scala index 5b6b7e438a2..beb743274e3 100644 --- a/main/define/src/mill/define/Reflect.scala +++ b/main/define/src/mill/define/Reflect.scala @@ -29,7 +29,6 @@ private[mill] object Reflect { isLegalIdentifier(n) && (!noParams || m.getParameterCount == 0) && (m.getModifiers & Modifier.STATIC) == 0 && - (m.getModifiers & Modifier.ABSTRACT) == 0 && inner.isAssignableFrom(m.getReturnType) } yield m diff --git a/main/resolve/test/src/mill/main/ResolveTests.scala b/main/resolve/test/src/mill/main/ResolveTests.scala index 6c8218db9fd..45d65bde8fd 100644 --- a/main/resolve/test/src/mill/main/ResolveTests.scala +++ b/main/resolve/test/src/mill/main/ResolveTests.scala @@ -1099,5 +1099,12 @@ object ResolveTests extends TestSuite { ) } } + test("abstractModule") { + val check = new Checker(TestGraphs.AbstractModule) + test - check( + "__", + Right(Set(_.concrete.tests.inner.foo, _.concrete.tests.inner.innerer.bar)) + ) + } } } diff --git a/main/test/src/mill/util/TestGraphs.scala b/main/test/src/mill/util/TestGraphs.scala index 3482f6e0636..dd92bd3d9b3 100644 --- a/main/test/src/mill/util/TestGraphs.scala +++ b/main/test/src/mill/util/TestGraphs.scala @@ -608,4 +608,23 @@ object TestGraphs { } } + object AbstractModule extends TestUtil.BaseModule { + trait Abstract extends Module { + lazy val tests: Tests = new Tests {} + trait Tests extends Module {} + } + + object concrete extends Abstract { + override lazy val tests: ConcreteTests = new ConcreteTests {} + trait ConcreteTests extends Tests { + object inner extends Module { + def foo = T { "foo" } + object innerer extends Module { + def bar = T { "bar" } + } + } + } + } + } + }