From a3d4b6246d49e4055a97e6929d6f1646c61d5f46 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Thu, 10 Sep 2020 13:25:48 +0200 Subject: [PATCH] Add filtering stategies extension point and fix constructors in Kotlin-as-Java --- plugins/base/api/base.api | 14 ++++++- plugins/base/frontend/package-lock.json | 2 +- plugins/base/src/main/kotlin/DokkaBase.kt | 9 ++++ .../DefaultDocumentableFilteringStrategies.kt | 9 ++++ .../DefaultDocumentableToPageTranslator.kt | 7 ++-- .../documentables/DefaultPageCreator.kt | 10 +++-- .../DocumentableFilteringStrategies.kt | 7 ++++ .../PageTransformerBuilderTest.kt | 42 +++++++++++++++++-- plugins/kotlin-as-java/api/kotlin-as-java.api | 8 +++- .../src/main/kotlin/KotlinAsJavaPlugin.kt | 12 ++++-- ...inAsJavaDocumentableFilteringStrategies.kt | 8 ++++ ...otlinAsJavaDocumentableToPageTranslator.kt | 9 ++-- .../translators/KotlinAsJavaPageCreator.kt | 9 ++-- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 38 ++++++++++++++++- 14 files changed, 156 insertions(+), 28 deletions(-) create mode 100644 plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableFilteringStrategies.kt create mode 100644 plugins/base/src/main/kotlin/translators/documentables/DocumentableFilteringStrategies.kt create mode 100644 plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableFilteringStrategies.kt diff --git a/plugins/base/api/base.api b/plugins/base/api/base.api index 9450476bd7..c964e50044 100644 --- a/plugins/base/api/base.api +++ b/plugins/base/api/base.api @@ -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; @@ -1297,6 +1299,11 @@ 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 (Lorg/jetbrains/dokka/plugability/DokkaContext;)V public fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ModulePageNode; @@ -1304,7 +1311,7 @@ public final class org/jetbrains/dokka/base/translators/documentables/DefaultDoc } public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator { - public fun (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 (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; @@ -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; @@ -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 (Ljava/lang/String;)V diff --git a/plugins/base/frontend/package-lock.json b/plugins/base/frontend/package-lock.json index 997f5c0355..a28d810e70 100644 --- a/plugins/base/frontend/package-lock.json +++ b/plugins/base/frontend/package-lock.json @@ -41,7 +41,7 @@ "terser-webpack-plugin": "^5.2.5" }, "engines": { - "node": ">=17.0.0" + "node": ">=16.0.0" } }, "node_modules/@babel/code-frame": { diff --git a/plugins/base/src/main/kotlin/DokkaBase.kt b/plugins/base/src/main/kotlin/DokkaBase.kt index 03fbf64e28..87bf1c23e5 100644 --- a/plugins/base/src/main/kotlin/DokkaBase.kt +++ b/plugins/base/src/main/kotlin/DokkaBase.kt @@ -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 @@ -51,6 +54,8 @@ class DokkaBase : DokkaPlugin() { CoreExtensions.generation providing ::SingleModuleGeneration } + val documentableFilteringStrategies by extensionPoint() + val descriptorToDocumentableTranslator by extending { CoreExtensions.sourceToDocumentableTranslator providing ::DefaultDescriptorToDocumentableTranslator } @@ -252,4 +257,8 @@ class DokkaBase : DokkaPlugin() { val baseSearchbarDataInstaller by extending { htmlPreprocessors providing ::SearchbarDataInstaller order { after(sourceLinksTransformer) } } + + val defaultDocumentableFilteringStrategies by extending { + documentableFilteringStrategies with DefaultDocumentableFilteringStrategies + } } diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableFilteringStrategies.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableFilteringStrategies.kt new file mode 100644 index 0000000000..412f04f4c9 --- /dev/null +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableFilteringStrategies.kt @@ -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() +} diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableToPageTranslator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableToPageTranslator.kt index 186472075b..30f8ff9d0d 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableToPageTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultDocumentableToPageTranslator.kt @@ -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(context) private val commentsToContentConverter = context.plugin().querySingle { commentsToContentConverter } private val signatureProvider = context.plugin().querySingle { signatureProvider } - private val logger = context.logger override fun invoke(module: DModule): ModulePageNode = - DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, logger).pageForModule(module) -} \ No newline at end of file + DefaultPageCreator(configuration, commentsToContentConverter, signatureProvider, context).pageForModule(module) +} diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt index 1b58135562..adb8eaceb7 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt @@ -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, List>> @@ -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 = @@ -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().documentableFilteringStrategies)::shouldConstructorBeInPage), c.sourceSets, needsAnchors = true, extra = PropertyContainer.empty() + SimpleAttr.header("Constructors") diff --git a/plugins/base/src/main/kotlin/translators/documentables/DocumentableFilteringStrategies.kt b/plugins/base/src/main/kotlin/translators/documentables/DocumentableFilteringStrategies.kt new file mode 100644 index 0000000000..d47be2259f --- /dev/null +++ b/plugins/base/src/main/kotlin/translators/documentables/DocumentableFilteringStrategies.kt @@ -0,0 +1,7 @@ +package org.jetbrains.dokka.base.translators.documentables + +import org.jetbrains.dokka.model.DFunction + +interface DocumentableFilteringStrategies { + fun shouldConstructorBeInPage(constructor: DFunction): Boolean +} diff --git a/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt b/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt index e17f0800c6..0b4baa1c7c 100644 --- a/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt +++ b/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt @@ -1,9 +1,7 @@ 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 @@ -11,6 +9,7 @@ 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() { @@ -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() } + .map { it.content }.single().children + .filterIsInstance() + .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 Collection.assertCount(n: Int, prefix: String = "") = assert(count() == n) { "${prefix}Expected $n, got ${count()}" } diff --git a/plugins/kotlin-as-java/api/kotlin-as-java.api b/plugins/kotlin-as-java/api/kotlin-as-java.api index 4dd8b33a03..334c78b1f5 100644 --- a/plugins/kotlin-as-java/api/kotlin-as-java.api +++ b/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 ()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; @@ -73,6 +74,11 @@ 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 (Lorg/jetbrains/dokka/plugability/DokkaContext;)V public fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ModulePageNode; @@ -80,7 +86,7 @@ public final class org/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaDocu } public final class org/jetbrains/dokka/kotlinAsJava/translators/KotlinAsJavaPageCreator : org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator { - public fun (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 (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; } diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt index b8e12553e5..082bd4fd63 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt @@ -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 { @@ -26,8 +25,15 @@ class KotlinAsJavaPlugin : DokkaPlugin() { signatureProvider providing ::JavaSignatureProvider override kotlinSignatureProvider } } + + val defaultDocumentableFilteringStrategies by extending { + val dokkaBasePlugin = plugin() + dokkaBasePlugin.documentableFilteringStrategies with KotlinAsJavaDocumentableFilteringStrategies override + dokkaBasePlugin.defaultDocumentableFilteringStrategies + } + val kotlinAsJavaDocumentableToPageTranslator by extending { CoreExtensions.documentableToPageTranslator providing ::KotlinAsJavaDocumentableToPageTranslator override plugin().documentableToPageTranslator } -} \ No newline at end of file +} diff --git a/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableFilteringStrategies.kt b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableFilteringStrategies.kt new file mode 100644 index 0000000000..5ff8001326 --- /dev/null +++ b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableFilteringStrategies.kt @@ -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 +} diff --git a/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableToPageTranslator.kt b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableToPageTranslator.kt index 0f7d74b62e..532d29ebc8 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableToPageTranslator.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaDocumentableToPageTranslator.kt @@ -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 @@ -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(context) private val commentsToContentConverter = context.plugin().querySingle { commentsToContentConverter } private val signatureProvider = context.plugin().querySingle { signatureProvider } - private val logger: DokkaLogger = context.logger override fun invoke(module: DModule): ModulePageNode = - KotlinAsJavaPageCreator(configuration, commentsToContentConverter, signatureProvider, logger).pageForModule(module) -} \ No newline at end of file + KotlinAsJavaPageCreator(configuration, commentsToContentConverter, signatureProvider, context).pageForModule(module) +} diff --git a/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaPageCreator.kt b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaPageCreator.kt index b2cf624651..4be6a9a0e8 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaPageCreator.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/translators/KotlinAsJavaPageCreator.kt @@ -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 -} \ No newline at end of file +} diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt index 655405b943..7c0c0de192 100644 --- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt +++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt @@ -15,6 +15,7 @@ import utils.A import utils.Span import utils.TestOutputWriterPlugin import utils.match +import kotlin.test.assertEquals class KotlinAsJavaPluginTest : BaseAbstractTest() { @@ -87,7 +88,10 @@ class KotlinAsJavaPluginTest : BaseAbstractTest() { .map { it.content } val children = contentList.flatMap { content -> - content.mainContents.first().cast().children + content.mainContents.single { it is ContentGroup }.children // TODO: Fix nesting of groups in PageCreator, + // becuase now there is different level of nesting constructors and properties/functions + // `contentForScope` is called on same level as constructors are + // best solution would be possibility to merge these groups .filterIsInstance() .filter { it.children.isNotEmpty() } } @@ -437,6 +441,38 @@ class KotlinAsJavaPluginTest : BaseAbstractTest() { } } } + + @Test + fun `kotlin as java constructor`() { + val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src/") + } + } + } + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt + |package kotlinAsJavaPlugin + | + |class Test(val xd: Int) + """.trimMargin(), + configuration, + cleanupOutput = true + ) { + pagesGenerationStage = { root -> + val content = root.children + .flatMap { it.children() } + .map { it.content }.single().mainContents + + val text = content.single { it is ContentHeader }.children + .single() as ContentText + + assertEquals("Constructors", text.text) + } + } + } } private val ContentNode.mainContents: List