@@ -28,7 +28,7 @@ import dotty.dokka.model.api._
2828 */
2929case class DokkaTastyInspector (parser : Parser )(using ctx : DocContext ) extends DocTastyInspector :
3030
31- private val topLevels = Seq .newBuilder[Documentable ]
31+ private val topLevels = Seq .newBuilder[( String , Member ) ]
3232
3333 def processCompilationUnit (using q : Quotes )(root : q.reflect.Tree ): Unit =
3434 // NOTE we avoid documenting definitions in the magical stdLibPatches directory;
@@ -48,72 +48,21 @@ case class DokkaTastyInspector(parser: Parser)(using ctx: DocContext) extends Do
4848 topLevels ++= parser.parseRootTree(root.asInstanceOf [parser.qctx.reflect.Tree ])
4949 end processCompilationUnit
5050
51- def result (): List [DPackage ] =
51+ def result (): List [Member ] =
5252 topLevels.clear()
5353 val filePaths = ctx.args.tastyFiles.map(_.getAbsolutePath).toList
5454 val classpath = ctx.args.classpath.split(java.io.File .pathSeparator).toList
5555
5656 inspectFilesInContext(classpath, filePaths)
5757
5858 val all = topLevels.result()
59- val packages = all
60- .filter(_.isInstanceOf [DPackage ])
61- .map(_.asInstanceOf [DPackage ])
62- .groupBy(_.getDri)
63- .map((dri, pckgs) =>
64- pckgs.reduce(_.mergeWith(_))
65- )
66- .toList
67- .sortBy( pckg => pckg.dri.location.size )
68- .reverse
69-
70-
71- val byPackage = all.filter(_.dri != null ).groupBy( p =>
72- packages.find(d => p.dri.location.contains(d.dri.location)).getOrElse(throw IllegalStateException (" No package for entries found" ))
73- )
74-
75- byPackage
76- .map {
77- case (f, entries) => {
78- val pck = new DPackage (
79- f.getDri,
80- f.getFunctions,
81- f.getProperties,
82- JList (),
83- JList (),
84- f.getDocumentation,
85- null ,
86- JSet (ctx.sourceSet),
87- f.getExtra
88- )
89- .withNewMembers(entries.filterNot(_.isInstanceOf [DPackage ]).toList)
90- .withKind(Kind .Package )
91-
92- pck.asInstanceOf [DPackage ]
93- }
59+ all.groupBy(_._1).map { case (pckName, members) =>
60+ val (pcks, rest) = members.map(_._2).partition(_.kind == Kind .Package )
61+ pcks.reduce( (p1, p2) =>
62+ p1.withNewMembers(p2.allMembers) // TODO add doc
63+ ).withNewMembers(rest)
9464 }.toList
9565
96- extension (self : DPackage ) def mergeWith (other : DPackage ): DPackage =
97- def nodes (p : DPackage ): JList [TagWrapper ] = p.getDocumentation.get(ctx.sourceSet) match
98- case null => JList [TagWrapper ]()
99- case node => node.getChildren
100-
101- mergeExtras(
102- DPackage (
103- self.getDri,
104- (self.getFunctions.asScala ++ other.getFunctions.asScala).asJava,
105- (self.getProperties.asScala ++ other.getProperties.asScala).asJava,
106- JList (), // WARNING Merging is done before collecting classlikes, if it changes it needs to be refactored
107- JList (),
108- ctx.sourceSet.toMap(DocumentationNode (nodes(self) ++ nodes(other))),
109- null ,
110- ctx.sourceSet.toSet,
111- PropertyContainer .Companion .empty()
112- ),
113- self,
114- other
115- )
116-
11766/** Parses a single Tasty compilation unit. */
11867case class TastyParser (qctx : Quotes , inspector : DokkaTastyInspector )(using val ctx : DocContext )
11968 extends ScaladocSupport with BasicSupport with TypesSupport with ClassLikeSupport with SyntheticsSupport with PackageSupport with NameNormalizer :
@@ -135,8 +84,8 @@ case class TastyParser(qctx: Quotes, inspector: DokkaTastyInspector)(using val c
13584 report.warning(s " Failed to process ${sym.fullName}: \n ${throwableToString(t)}" )
13685 None
13786
138- def parseRootTree (root : Tree ): Seq [Documentable ] =
139- val docs = Seq .newBuilder[Documentable ]
87+ def parseRootTree (root : Tree ): Seq [( String , Member ) ] =
88+ val docs = Seq .newBuilder[( String , Member ) ]
14089 object Traverser extends TreeTraverser :
14190 var seen : List [Tree ] = Nil
14291
@@ -149,7 +98,7 @@ case class TastyParser(qctx: Quotes, inspector: DokkaTastyInspector)(using val c
14998 case packageObject : ClassDef if (packageObject.symbol.name.contains(" package$" )) =>
15099 docs += parsePackageObject(packageObject)
151100 case clazz : ClassDef if clazz.symbol.shouldDocumentClasslike =>
152- docs += parseClasslike(clazz)
101+ docs += clazz.symbol.packageName -> parseClasslike(clazz)
153102 case _ =>
154103 }
155104 seen = seen.tail
0 commit comments