@@ -58,34 +58,24 @@ object Discover {
5858 def applyImpl [T : Type ](using Quotes ): Expr [Discover [T ]] = {
5959 import quotes .reflect .*
6060 val seen = mutable.Set .empty[TypeRepr ]
61- val crossSym = Symbol .requiredClass(" mill.define.Cross" )
62- val crossArg = crossSym.typeMembers.filter(_.isTypeParam).head
6361 val moduleSym = Symbol .requiredClass(" mill.define.Module" )
6462 val deprecatedSym = Symbol .requiredClass(" scala.deprecated" )
6563 def rec (tpe : TypeRepr ): Unit = {
6664 if (seen.add(tpe)) {
6765 val typeSym = tpe.typeSymbol
6866 for {
69- // for some reason mill.define.Foreign has NoSymbol as type member.
67+ // for some reason mill.define.Foreign has NoSymbol as field member.
7068 m <- typeSym.fieldMembers.filterNot(_ == Symbol .noSymbol).toList.sortBy(_.name.toString)
71- memberTpe = {
72- if m == Symbol .noSymbol then
73- report.errorAndAbort(s " no symbol found in $typeSym typemembers ${typeSym.typeMembers}" , typeSym.pos.getOrElse(Position .ofMacroExpansion))
74- // try tpe.memberType(m)
75- // catch {
76- // case NonFatal(err) =>
77- // // report.errorAndAbort(s"Error getting member type for $m in $typeSym: ${err}", m.pos.getOrElse(Position.ofMacroExpansion))
78- // tpe.memberType(m.typeRef.dealias.typeSymbol)
79- // }
80- m.termRef
81- }
69+ memberTpe = m.termRef
8270 if memberTpe.baseClasses.contains(moduleSym)
83- } rec(memberTpe)
84-
85- if (tpe.baseClasses.contains(crossSym)) {
86- val arg = tpe.memberType(crossArg)
87- val argSym = arg.typeSymbol
88- rec(tpe.memberType(argSym))
71+ } {
72+ rec(memberTpe)
73+ memberTpe.asType match {
74+ case ' [mill.define.Cross [m]] =>
75+ rec(TypeRepr .of[m])
76+ case _ =>
77+ () // no cross argument to extract
78+ }
8979 }
9080 }
9181 }
0 commit comments