Skip to content

Commit

Permalink
Add filtering stategies extension point and fix constructors in Kotli…
Browse files Browse the repository at this point in the history
…n-as-Java
  • Loading branch information
BarkingBad committed Dec 16, 2021
1 parent ed5d582 commit a3d4b62
Show file tree
Hide file tree
Showing 14 changed files with 156 additions and 28 deletions.
14 changes: 13 additions & 1 deletion plugins/base/api/base.api
Expand Up @@ -5,12 +5,14 @@ public final class org/jetbrains/dokka/base/DokkaBase : org/jetbrains/dokka/plug
public final fun getBaseSearchbarDataInstaller ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getCommentsToContentConverter ()Lorg/jetbrains/dokka/plugability/ExtensionPoint;
public final fun getCustomResourceInstaller ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultDocumentableFilteringStrategies ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultKotlinAnalysis ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultSamplesTransformer ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultTabSortingStrategy ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDeprecatedDocumentableFilter ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDescriptorToDocumentableTranslator ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDocTagToContentConverter ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDocumentableFilteringStrategies ()Lorg/jetbrains/dokka/plugability/ExtensionPoint;
public final fun getDocumentableMerger ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDocumentableToPageTranslator ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDocumentableVisibilityFilter ()Lorg/jetbrains/dokka/plugability/Extension;
Expand Down Expand Up @@ -1297,14 +1299,19 @@ public final class org/jetbrains/dokka/base/translators/documentables/BriefFromC
public abstract interface annotation class org/jetbrains/dokka/base/translators/documentables/ContentBuilderMarker : java/lang/annotation/Annotation {
}

public final class org/jetbrains/dokka/base/translators/documentables/DefaultDocumentableFilteringStrategies : org/jetbrains/dokka/base/translators/documentables/DocumentableFilteringStrategies {
public static final field INSTANCE Lorg/jetbrains/dokka/base/translators/documentables/DefaultDocumentableFilteringStrategies;
public fun shouldConstructorBeInPage (Lorg/jetbrains/dokka/model/DFunction;)Z
}

public final class org/jetbrains/dokka/base/translators/documentables/DefaultDocumentableToPageTranslator : org/jetbrains/dokka/transformers/documentation/DocumentableToPageTranslator {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ModulePageNode;
public synthetic fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/RootPageNode;
}

public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator {
public fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;)V
public fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/plugability/DokkaContext;)V
protected fun contentForBrief (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Lorg/jetbrains/dokka/model/Documentable;)V
protected fun contentForClasslike (Lorg/jetbrains/dokka/model/DClasslike;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForComments (Lorg/jetbrains/dokka/model/Documentable;Z)Ljava/util/List;
Expand All @@ -1321,6 +1328,7 @@ public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreat
protected fun divergentBlock (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Ljava/lang/String;Ljava/util/Collection;Lorg/jetbrains/dokka/pages/ContentKind;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
public static synthetic fun divergentBlock$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Ljava/lang/String;Ljava/util/Collection;Lorg/jetbrains/dokka/pages/ContentKind;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)V
protected fun getContentBuilder ()Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder;
public final fun getContext ()Lorg/jetbrains/dokka/plugability/DokkaContext;
public final fun getLogger ()Lorg/jetbrains/dokka/utilities/DokkaLogger;
protected final fun getSeparateInheritedMembers ()Z
public fun pageForClasslike (Lorg/jetbrains/dokka/model/DClasslike;)Lorg/jetbrains/dokka/pages/ClasslikePageNode;
Expand All @@ -1332,6 +1340,10 @@ public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreat
protected fun toHeaderString (Lorg/jetbrains/dokka/model/doc/TagWrapper;)Ljava/lang/String;
}

public abstract interface class org/jetbrains/dokka/base/translators/documentables/DocumentableFilteringStrategies {
public abstract fun shouldConstructorBeInPage (Lorg/jetbrains/dokka/model/DFunction;)Z
}

public final class org/jetbrains/dokka/base/translators/documentables/DriClashAwareName : org/jetbrains/dokka/model/properties/ExtraProperty {
public static final field Companion Lorg/jetbrains/dokka/base/translators/documentables/DriClashAwareName$Companion;
public fun <init> (Ljava/lang/String;)V
Expand Down
2 changes: 1 addition & 1 deletion plugins/base/frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions plugins/base/src/main/kotlin/DokkaBase.kt
Expand Up @@ -25,7 +25,10 @@ import org.jetbrains.dokka.base.transformers.pages.merger.*
import org.jetbrains.dokka.base.transformers.pages.samples.DefaultSamplesTransformer
import org.jetbrains.dokka.base.transformers.pages.sourcelinks.SourceLinksTransformer
import org.jetbrains.dokka.base.translators.descriptors.DefaultDescriptorToDocumentableTranslator
import org.jetbrains.dokka.base.translators.documentables.DefaultDocumentableFilteringStrategies
import org.jetbrains.dokka.base.translators.documentables.DefaultDocumentableToPageTranslator
import org.jetbrains.dokka.base.translators.documentables.DocumentableFilteringStrategies
import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder
import org.jetbrains.dokka.base.translators.psi.DefaultPsiToDocumentableTranslator
import org.jetbrains.dokka.base.generation.SingleModuleGeneration
import org.jetbrains.dokka.base.renderers.html.command.consumers.ReplaceVersionsConsumer
Expand All @@ -51,6 +54,8 @@ class DokkaBase : DokkaPlugin() {
CoreExtensions.generation providing ::SingleModuleGeneration
}

val documentableFilteringStrategies by extensionPoint<DocumentableFilteringStrategies>()

val descriptorToDocumentableTranslator by extending {
CoreExtensions.sourceToDocumentableTranslator providing ::DefaultDescriptorToDocumentableTranslator
}
Expand Down Expand Up @@ -252,4 +257,8 @@ class DokkaBase : DokkaPlugin() {
val baseSearchbarDataInstaller by extending {
htmlPreprocessors providing ::SearchbarDataInstaller order { after(sourceLinksTransformer) }
}

val defaultDocumentableFilteringStrategies by extending {
documentableFilteringStrategies with DefaultDocumentableFilteringStrategies
}
}
@@ -0,0 +1,9 @@
package org.jetbrains.dokka.base.translators.documentables

import org.jetbrains.dokka.model.DFunction
import org.jetbrains.dokka.model.PrimaryConstructorExtra

object DefaultDocumentableFilteringStrategies : DocumentableFilteringStrategies {
override fun shouldConstructorBeInPage(constructor: DFunction): Boolean =
constructor.extra[PrimaryConstructorExtra] == null || constructor.documentation.isNotEmpty()
}
Expand Up @@ -11,13 +11,12 @@ import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.transformers.documentation.DocumentableToPageTranslator

class DefaultDocumentableToPageTranslator(
context: DokkaContext
private val context: DokkaContext
) : DocumentableToPageTranslator {
private val configuration = configuration<DokkaBase, DokkaBaseConfiguration>(context)
private val commentsToContentConverter = context.plugin<DokkaBase>().querySingle { commentsToContentConverter }
private val signatureProvider = context.plugin<DokkaBase>().querySingle { signatureProvider }
private val logger = context.logger

override fun invoke(module: DModule): ModulePageNode =
DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, logger).pageForModule(module)
}
DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, context).pageForModule(module)
}
Expand Up @@ -11,14 +11,16 @@ import org.jetbrains.dokka.model.doc.*
import org.jetbrains.dokka.model.properties.PropertyContainer
import org.jetbrains.dokka.model.properties.WithExtraProperties
import org.jetbrains.dokka.pages.*
import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import kotlin.reflect.KClass
import kotlin.reflect.full.isSubclassOf
import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet
import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.base.resolvers.anchors.SymbolAnchorHint
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.transformers.documentables.ClashingDriIdentifier
import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.plugin

private typealias GroupedTags = Map<KClass<out TagWrapper>, List<Pair<DokkaSourceSet?, TagWrapper>>>

Expand All @@ -29,8 +31,10 @@ open class DefaultPageCreator(
configuration: DokkaBaseConfiguration?,
commentsToContentConverter: CommentsToContentConverter,
signatureProvider: SignatureProvider,
val logger: DokkaLogger
val context: DokkaContext
) {
val logger by context::logger

protected open val contentBuilder = PageContentBuilder(commentsToContentConverter, signatureProvider, logger)

protected val separateInheritedMembers =
Expand Down Expand Up @@ -256,7 +260,7 @@ open class DefaultPageCreator(
"Constructors",
2,
ContentKind.Constructors,
c.constructors.filter { it.extra[PrimaryConstructorExtra] == null || it.documentation.isNotEmpty() },
c.constructors.filter(context.single(context.plugin<DokkaBase>().documentableFilteringStrategies)::shouldConstructorBeInPage),
c.sourceSets,
needsAnchors = true,
extra = PropertyContainer.empty<ContentNode>() + SimpleAttr.header("Constructors")
Expand Down
@@ -0,0 +1,7 @@
package org.jetbrains.dokka.base.translators.documentables

import org.jetbrains.dokka.model.DFunction

interface DocumentableFilteringStrategies {
fun shouldConstructorBeInPage(constructor: DFunction): Boolean
}
@@ -1,16 +1,15 @@
package transformerBuilders;

import org.jetbrains.dokka.CoreExtensions
import org.jetbrains.dokka.pages.PageNode
import org.jetbrains.dokka.pages.RendererSpecificResourcePage
import org.jetbrains.dokka.pages.RenderingStrategy
import org.jetbrains.dokka.pages.*
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.transformers.pages.PageTransformer
import org.jetbrains.dokka.transformers.pages.pageMapper
import org.jetbrains.dokka.transformers.pages.pageScanner
import org.jetbrains.dokka.transformers.pages.pageStructureTransformer
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals

class PageTransformerBuilderTest : BaseAbstractTest() {

Expand Down Expand Up @@ -133,6 +132,43 @@ class PageTransformerBuilderTest : BaseAbstractTest() {
}
}

@Test
fun `kotlin constructors tab should not exist`() {
val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/")
}
}
}
testInline(
"""
|/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
|package kotlinAsJavaPlugin
|
|class Test(val xd: Int)
""".trimMargin(),
configuration
) {
pagesGenerationStage = { root ->
val content = root.children
.flatMap { it.children<ContentPage>() }
.map { it.content }.single().children
.filterIsInstance<ContentGroup>()
.single { it.dci.kind == ContentKind.Main }.children

val constructorTabsCount = content.filter { it is ContentHeader }.flatMap {
it.children.filter { it is ContentText }
}.count {
(it as? ContentText)?.text == "Constructors"
}

assertEquals(0, constructorTabsCount)
}
}
}


private fun <T> Collection<T>.assertCount(n: Int, prefix: String = "") =
assert(count() == n) { "${prefix}Expected $n, got ${count()}" }

Expand Down
8 changes: 7 additions & 1 deletion plugins/kotlin-as-java/api/kotlin-as-java.api
@@ -1,5 +1,6 @@
public final class org/jetbrains/dokka/kotlinAsJava/KotlinAsJavaPlugin : org/jetbrains/dokka/plugability/DokkaPlugin {
public fun <init> ()V
public final fun getDefaultDocumentableFilteringStrategies ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getJavaSignatureProvider ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getJvmNameTransformer ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getKotlinAsJavaDocumentableToPageTranslator ()Lorg/jetbrains/dokka/plugability/Extension;
Expand Down Expand Up @@ -73,14 +74,19 @@ public final class org/jetbrains/dokka/kotlinAsJava/transformers/Name {
public fun toString ()Ljava/lang/String;
}

public final class org/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaDocumentableFilteringStrategies : org/jetbrains/dokka/base/translators/documentables/DocumentableFilteringStrategies {
public static final field INSTANCE Lorg/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaDocumentableFilteringStrategies;
public fun shouldConstructorBeInPage (Lorg/jetbrains/dokka/model/DFunction;)Z
}

public final class org/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaDocumentableToPageTranslator : org/jetbrains/dokka/transformers/documentation/DocumentableToPageTranslator {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ModulePageNode;
public synthetic fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/RootPageNode;
}

public final class org/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaPageCreator : org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator {
public fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;)V
public fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun pageForProperty (Lorg/jetbrains/dokka/model/DProperty;)Lorg/jetbrains/dokka/pages/MemberPageNode;
}

12 changes: 9 additions & 3 deletions plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt
Expand Up @@ -2,13 +2,12 @@ package org.jetbrains.dokka.kotlinAsJava

import org.jetbrains.dokka.CoreExtensions
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.kotlinAsJava.signatures.JavaSignatureProvider
import org.jetbrains.dokka.kotlinAsJava.transformers.JvmNameDocumentableTransformer
import org.jetbrains.dokka.kotlinAsJava.transformers.KotlinAsJavaDocumentableTransformer
import org.jetbrains.dokka.kotlinAsJava.translators.KotlinAsJavaDocumentableFilteringStrategies
import org.jetbrains.dokka.kotlinAsJava.translators.KotlinAsJavaDocumentableToPageTranslator
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.jetbrains.dokka.plugability.configuration

class KotlinAsJavaPlugin : DokkaPlugin() {
val kotlinAsJavaDocumentableTransformer by extending {
Expand All @@ -26,8 +25,15 @@ class KotlinAsJavaPlugin : DokkaPlugin() {
signatureProvider providing ::JavaSignatureProvider override kotlinSignatureProvider
}
}

val defaultDocumentableFilteringStrategies by extending {
val dokkaBasePlugin = plugin<DokkaBase>()
dokkaBasePlugin.documentableFilteringStrategies with KotlinAsJavaDocumentableFilteringStrategies override
dokkaBasePlugin.defaultDocumentableFilteringStrategies
}

val kotlinAsJavaDocumentableToPageTranslator by extending {
CoreExtensions.documentableToPageTranslator providing ::KotlinAsJavaDocumentableToPageTranslator override
plugin<DokkaBase>().documentableToPageTranslator
}
}
}
@@ -0,0 +1,8 @@
package org.jetbrains.dokka.kotlinAsJava.translators

import org.jetbrains.dokka.base.translators.documentables.DocumentableFilteringStrategies
import org.jetbrains.dokka.model.DFunction

object KotlinAsJavaDocumentableFilteringStrategies : DocumentableFilteringStrategies {
override fun shouldConstructorBeInPage(constructor: DFunction) = true
}
Expand Up @@ -2,8 +2,6 @@ package org.jetbrains.dokka.kotlinAsJava.translators

import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.base.signatures.SignatureProvider
import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.transformers.documentation.DocumentableToPageTranslator
import org.jetbrains.dokka.model.DModule
Expand All @@ -14,12 +12,11 @@ import org.jetbrains.dokka.plugability.plugin
import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.utilities.DokkaLogger

class KotlinAsJavaDocumentableToPageTranslator(context: DokkaContext) : DocumentableToPageTranslator {
class KotlinAsJavaDocumentableToPageTranslator(private val context: DokkaContext) : DocumentableToPageTranslator {
private val configuration = configuration<DokkaBase, DokkaBaseConfiguration>(context)
private val commentsToContentConverter = context.plugin<DokkaBase>().querySingle { commentsToContentConverter }
private val signatureProvider = context.plugin<DokkaBase>().querySingle { signatureProvider }
private val logger: DokkaLogger = context.logger

override fun invoke(module: DModule): ModulePageNode =
KotlinAsJavaPageCreator(configuration, commentsToContentConverter, signatureProvider, logger).pageForModule(module)
}
KotlinAsJavaPageCreator(configuration, commentsToContentConverter, signatureProvider, context).pageForModule(module)
}
Expand Up @@ -4,16 +4,15 @@ import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.base.signatures.SignatureProvider
import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter
import org.jetbrains.dokka.base.translators.documentables.DefaultPageCreator
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.model.DProperty
import org.jetbrains.dokka.pages.MemberPageNode
import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.dokka.plugability.DokkaContext

class KotlinAsJavaPageCreator(
configuration: DokkaBaseConfiguration?,
commentsToContentConverter: CommentsToContentConverter,
signatureProvider: SignatureProvider,
logger: DokkaLogger
) : DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, logger) {
context: DokkaContext
) : DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, context) {
override fun pageForProperty(p: DProperty): MemberPageNode? = null
}
}

0 comments on commit a3d4b62

Please sign in to comment.