From 5922c03ed5a5a003cfe6adb10dd5be57531cb310 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Wed, 22 Dec 2021 14:53:04 +0100 Subject: [PATCH] Remove filtering out primary constructors from constructors tab --- .../documentables/DefaultPageCreator.kt | 2 +- .../PageTransformerBuilderTest.kt | 42 ++++++++++++++++-- .../src/main/kotlin/KotlinAsJavaPlugin.kt | 3 +- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 44 +++++++++++++++++++ 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt index 1b58135562..82adcd4adc 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt @@ -256,7 +256,7 @@ open class DefaultPageCreator( "Constructors", 2, ContentKind.Constructors, - c.constructors.filter { it.extra[PrimaryConstructorExtra] == null || it.documentation.isNotEmpty() }, + c.constructors, c.sourceSets, needsAnchors = true, extra = PropertyContainer.empty() + SimpleAttr.header("Constructors") diff --git a/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt b/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt index e17f0800c6..a6f9af7dcf 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 exist even though there is primary constructor only`() { + 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(1, constructorTabsCount) + } + } + } + + private fun Collection.assertCount(n: Int, prefix: String = "") = assert(count() == n) { "${prefix}Expected $n, got ${count()}" } diff --git a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt index b8e12553e5..531ff59fb9 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/KotlinAsJavaPlugin.kt @@ -26,8 +26,9 @@ class KotlinAsJavaPlugin : DokkaPlugin() { signatureProvider providing ::JavaSignatureProvider override kotlinSignatureProvider } } + 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/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt index 655405b943..81d17cf5f9 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() { @@ -437,6 +438,49 @@ class KotlinAsJavaPluginTest : BaseAbstractTest() { } } } + + @Test + fun `should render primary kotlin constructor as a java constructor`() { + val writerPlugin = TestOutputWriterPlugin() + val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src/") + externalDocumentationLinks = listOf( + DokkaConfiguration.ExternalDocumentationLink.jdk(8), + stdlibExternalDocumentationLink + ) + } + } + } + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt + |package kotlinAsJavaPlugin + | + |class Test(val xd: Int) + """.trimMargin(), + configuration, + pluginOverrides = listOf(writerPlugin), + 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) + } + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/kotlinAsJavaPlugin/-test/-test.html").signature().first().match( + A("Test"), A("Test"), "(", A("Integer"), "xd)", Span(), ignoreSpanWithTokenStyle = true + ) + } + } + } } private val ContentNode.mainContents: List