@@ -28,7 +28,7 @@ import dotty.dokka.model.api._
28
28
*/
29
29
case class DokkaTastyInspector (parser : Parser )(using ctx : DocContext ) extends DocTastyInspector :
30
30
31
- private val topLevels = Seq .newBuilder[Documentable ]
31
+ private val topLevels = Seq .newBuilder[( String , Member ) ]
32
32
33
33
def processCompilationUnit (using q : Quotes )(root : q.reflect.Tree ): Unit =
34
34
// NOTE we avoid documenting definitions in the magical stdLibPatches directory;
@@ -48,72 +48,21 @@ case class DokkaTastyInspector(parser: Parser)(using ctx: DocContext) extends Do
48
48
topLevels ++= parser.parseRootTree(root.asInstanceOf [parser.qctx.reflect.Tree ])
49
49
end processCompilationUnit
50
50
51
- def result (): List [DPackage ] =
51
+ def result (): List [Member ] =
52
52
topLevels.clear()
53
53
val filePaths = ctx.args.tastyFiles.map(_.getAbsolutePath).toList
54
54
val classpath = ctx.args.classpath.split(java.io.File .pathSeparator).toList
55
55
56
56
inspectFilesInContext(classpath, filePaths)
57
57
58
58
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)
94
64
}.toList
95
65
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
-
117
66
/** Parses a single Tasty compilation unit. */
118
67
case class TastyParser (qctx : Quotes , inspector : DokkaTastyInspector )(using val ctx : DocContext )
119
68
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
135
84
report.warning(s " Failed to process ${sym.fullName}: \n ${throwableToString(t)}" )
136
85
None
137
86
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 ) ]
140
89
object Traverser extends TreeTraverser :
141
90
var seen : List [Tree ] = Nil
142
91
@@ -149,7 +98,7 @@ case class TastyParser(qctx: Quotes, inspector: DokkaTastyInspector)(using val c
149
98
case packageObject : ClassDef if (packageObject.symbol.name.contains(" package$" )) =>
150
99
docs += parsePackageObject(packageObject)
151
100
case clazz : ClassDef if clazz.symbol.shouldDocumentClasslike =>
152
- docs += parseClasslike(clazz)
101
+ docs += clazz.symbol.packageName -> parseClasslike(clazz)
153
102
case _ =>
154
103
}
155
104
seen = seen.tail
0 commit comments