diff --git a/scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala b/scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala index c1cd3c3ebdd7..33d61d477f02 100644 --- a/scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala +++ b/scala3doc/src/dotty/dokka/DottyDokkaPlugin.scala @@ -88,19 +88,6 @@ class DottyDokkaPlugin extends DokkaJavaPlugin: }.overrideExtension(dokkaBase.getDocumentableToPageTranslator) ) - val packageHierarchyTransformer = extend( - _.extensionPoint(CoreExtensions.INSTANCE.getPageTransformer) - .fromRecipe(PackageHierarchyTransformer(_)) - .before(dokkaBase.getRootCreator) - .overrideExtension(dokkaBase.getDefaultSamplesTransformer) - ) - - val inheritanceTransformer = extend( - _.extensionPoint(CoreExtensions.INSTANCE.getDocumentableTransformer) - .fromRecipe(InheritanceInformationTransformer(_)) - .name("inheritanceTransformer") - ) - val ourRenderer = extend( _.extensionPoint(CoreExtensions.INSTANCE.getRenderer) .fromRecipe { case ctx @ given DokkaContext => new ScalaHtmlRenderer } @@ -113,13 +100,6 @@ class DottyDokkaPlugin extends DokkaJavaPlugin: .overrideExtension(dokkaBase.getDocTagToContentConverter) ) - val implicitMembersExtensionTransformer = extend( - _.extensionPoint(CoreExtensions.INSTANCE.getDocumentableTransformer) - .fromRecipe { case ctx @ given DokkaContext => - new ImplicitMembersExtensionTransformer - }.name("implicitMembersExtensionTransformer") - ) - val customDocumentationProvider = extend( _.extensionPoint(dokkaBase.getHtmlPreprocessors) .fromRecipe{ case c @ given DokkaContext => new SitePagesCreator } diff --git a/scala3doc/src/dotty/dokka/ScalaModuleCreator.scala b/scala3doc/src/dotty/dokka/ScalaModuleCreator.scala index f7911db4c9d2..1b4b277f51f3 100644 --- a/scala3doc/src/dotty/dokka/ScalaModuleCreator.scala +++ b/scala3doc/src/dotty/dokka/ScalaModuleCreator.scala @@ -34,7 +34,12 @@ class ScalaModuleProvider(using ctx: DocContext) extends SourceToDocumentableTra PropertyContainer.Companion.empty() ).withNewMembers(packageMembers).withKind(Kind.RootPackage).withDocs(rootDoc).asInstanceOf[DPackage] - new DModule( + val transformers = List( + ImplicitMembersExtensionTransformer(), + InheritanceInformationTransformer() + ) + + val module = new DModule( sourceSet.getDisplayName, JList(topLevelPackage), JMap(), @@ -43,6 +48,8 @@ class ScalaModuleProvider(using ctx: DocContext) extends SourceToDocumentableTra PropertyContainer.Companion.empty() plus ModuleExtension(result.flatMap(flattenMember).toMap) ) + transformers.foldLeft(module)( (module, transformer) => transformer(module) ) + object EmptyModuleProvider extends SourceToDocumentableTranslator: override def invoke(sourceSet: DokkaSourceSet, cxt: DokkaContext, unused: Continuation[? >: DModule]) = DModule("", JList(), Map.empty.asJava, null, Set(sourceSet).asJava, PropertyContainer.Companion.empty()) diff --git a/scala3doc/src/dotty/dokka/transformers/ImplicitMembersExtensionTransformer.scala b/scala3doc/src/dotty/dokka/transformers/ImplicitMembersExtensionTransformer.scala index 5fed30269a97..3d787873edf4 100644 --- a/scala3doc/src/dotty/dokka/transformers/ImplicitMembersExtensionTransformer.scala +++ b/scala3doc/src/dotty/dokka/transformers/ImplicitMembersExtensionTransformer.scala @@ -10,10 +10,10 @@ import org.jetbrains.dokka.model.properties._ import dotty.dokka.model._ import dotty.dokka.model.api._ -class ImplicitMembersExtensionTransformer(using DocContext) extends DocumentableTransformer: - override def invoke(original: DModule, context: DokkaContext): DModule = +class ImplicitMembersExtensionTransformer(using context: DocContext) extends ModuleTransformer: + override def apply(original: DModule): DModule = val classlikeMap = original.driMap - val logger = context.getLogger + val logger = context.logger def retrieveCompanion(m: Member) = m.companion.flatMap { dri => val res = classlikeMap.get(dri) diff --git a/scala3doc/src/dotty/dokka/transformers/InheritanceInformationTransformer.scala b/scala3doc/src/dotty/dokka/transformers/InheritanceInformationTransformer.scala index d95cd975aa66..51a9e01e5c09 100644 --- a/scala3doc/src/dotty/dokka/transformers/InheritanceInformationTransformer.scala +++ b/scala3doc/src/dotty/dokka/transformers/InheritanceInformationTransformer.scala @@ -10,8 +10,8 @@ import dotty.dokka.model._ import dotty.dokka.model.api._ -class InheritanceInformationTransformer(val ctx: DokkaContext) extends DocumentableTransformer: - override def invoke(original: DModule, context: DokkaContext): DModule = +class InheritanceInformationTransformer(using context: DocContext) extends ModuleTransformer: + override def apply(original: DModule): DModule = val subtypes = getSupertypes(original.getPackages.get(0)).groupBy(_._1).transform((k, v) => v.map(_._2)) original.updateMembers { m => val st: Seq[LinkToType] = subtypes.getOrElse(m.dri, Nil) diff --git a/scala3doc/src/dotty/dokka/transformers/ModuleTransformer.scala b/scala3doc/src/dotty/dokka/transformers/ModuleTransformer.scala new file mode 100644 index 000000000000..a550ff047aad --- /dev/null +++ b/scala3doc/src/dotty/dokka/transformers/ModuleTransformer.scala @@ -0,0 +1,6 @@ +package dotty.dokka + +import org.jetbrains.dokka.model._ + +abstract trait ModuleTransformer: + def apply(m: DModule): DModule \ No newline at end of file diff --git a/scala3doc/src/dotty/dokka/transformers/PackageHierarchyTransformer.scala b/scala3doc/src/dotty/dokka/transformers/PackageHierarchyTransformer.scala deleted file mode 100644 index 377656e670b7..000000000000 --- a/scala3doc/src/dotty/dokka/transformers/PackageHierarchyTransformer.scala +++ /dev/null @@ -1,71 +0,0 @@ -package dotty.dokka - -import org.jetbrains.dokka.transformers.pages.{PageTransformer} -import org.jetbrains.dokka.pages._ -import collection.JavaConverters -import collection.JavaConverters._ -import org.jetbrains.dokka.plugability.DokkaContext - -class PackageHierarchyTransformer(context: DokkaContext) extends PageTransformer: - override def invoke(input: RootPageNode): RootPageNode = input match { - case m: ModulePageNode => rearangePackagePages(m) - case other => { - context.getLogger.warn("PackageHierarchyTransformer: Couldn't transform root because root is not ModulePageNode") - other - } - } - - def rearangePackagePages(page: ModulePageNode): ModulePageNode = { - val (h1, h2) = page.getChildren.asScala.partition{ - case p: PackagePageNode => true - case other => false - } - - val (packagePages, otherPages) = (h1.collect{ case p: PackagePageNode => p}.toSeq, h2.collect{ case q: PageNode => q }.toSeq ) - - def isParent(possibleParent: Seq[String], comparedChildren: Seq[String]): Boolean = comparedChildren.startsWith(possibleParent) - - def getRelativeName(parent: Seq[String], child: Seq[String]): Seq[String] = child.slice(parent.size, child.size) - - def relativePageName(parentName: Seq[String], childName: Seq[String], childPage: PageNode): PageNode = - childPage.modified( - childName.slice(parentName.size, childName.size).mkString("",".",""), - childPage.getChildren - ) - - def buildPackageTree( - depth: Int, - remaining: Seq[(Seq[String], PackagePageNode)], - processsed: Seq[(Seq[String], PackagePageNode)] - ): Seq[PackagePageNode] = { - val (currentDepth,rest) = remaining.partition((tokens, page) => tokens.size == depth) - val newProcessed = currentDepth.map( (tokens, page) => { - val newPage = page.modified( - page.getName, - (processsed - .filter((childTokens, child) => isParent(tokens, childTokens)) - .map((childTokens, child) => relativePageName(tokens, childTokens, child)) - ++ page.getChildren.asScala).asJava, - ) - (tokens, newPage) - } - ) - val oldFilteredProcessed = processsed - .filter( (tokens, page) => - currentDepth.forall( (parentTokens, parentPage) => - !isParent(parentTokens, tokens) - ) - ) - - if(depth == 1) (newProcessed ++ oldFilteredProcessed).map(_(1)) - else buildPackageTree(depth - 1, rest, newProcessed ++ oldFilteredProcessed) - } - - val packagePagesWithTokens = packagePages.map(page => (("""\.""".r.split(page.getName)).toSeq, page)) - - val newPages = if packagePagesWithTokens.isEmpty then page.getChildren else - val maxDepthElem = packagePagesWithTokens.maxBy( (tokens, page) => tokens.size ) - (otherPages ++ buildPackageTree(maxDepthElem(0).size, packagePagesWithTokens, Seq.empty)).asJava - - page.modified(page.getName, newPages) - }