diff options
author | Ignat Beresnev <ignat.beresnev@jetbrains.com> | 2022-08-26 16:38:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-26 16:38:37 +0200 |
commit | 34a8ae166e7220ddf8c3c42fab466234623501e7 (patch) | |
tree | d061a5775aa57d1d31ab8efca5f1a36ac7be3fbe | |
parent | c37c9716857d78589a9e6faba27d2c596f2384de (diff) | |
download | dokka-34a8ae166e7220ddf8c3c42fab466234623501e7.tar.gz dokka-34a8ae166e7220ddf8c3c42fab466234623501e7.tar.bz2 dokka-34a8ae166e7220ddf8c3c42fab466234623501e7.zip |
Do not render constructor pages and blocks and for annotation classes (#2642)
-rw-r--r-- | plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt | 14 | ||||
-rw-r--r-- | plugins/base/src/test/kotlin/content/signatures/ConstructorsSignaturesTest.kt (renamed from plugins/base/src/test/kotlin/content/signatures/SkippingParenthesisForConstructorsTest.kt) | 45 |
2 files changed, 57 insertions, 2 deletions
diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt index 44e2728a..7f16c568 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt @@ -96,7 +96,12 @@ open class DefaultPageCreator( } } - val constructors = documentables.flatMap { if (it is WithConstructors) it.constructors else emptyList() } + val constructors = + if (documentables.shouldRenderConstructors()) { + documentables.flatMap { (it as? WithConstructors)?.constructors ?: emptyList() } + } else { + emptyList() + } val classlikes = documentables.flatMap { it.classlikes } val functions = documentables.flatMap { it.filteredFunctions } @@ -366,7 +371,7 @@ open class DefaultPageCreator( group(styles = setOf(ContentStyle.TabbedContent), sourceSets = mainSourcesetData + extensions.sourceSets) { +contentForComments(documentables) val csWithConstructor = classlikes.filterIsInstance<WithConstructors>() - if (csWithConstructor.isNotEmpty()) { + if (csWithConstructor.isNotEmpty() && documentables.shouldRenderConstructors()) { val constructorsToDocumented = csWithConstructor.flatMap { it.constructors } multiBlock( "Constructors", @@ -432,6 +437,11 @@ open class DefaultPageCreator( } } + // Annotations might have constructors to substitute reflection invocations + // and for internal/compiler purposes, but they are not expected to be documented + // and instantiated directly under normal circumstances, so constructors should not be rendered. + private fun List<Documentable>.shouldRenderConstructors() = !this.any { it is DAnnotation } + @Suppress("UNCHECKED_CAST") private inline fun <reified T : TagWrapper> GroupedTags.withTypeUnnamed(): SourceSetDependent<T> = (this[T::class] as List<Pair<DokkaSourceSet, T>>?)?.toMap().orEmpty() diff --git a/plugins/base/src/test/kotlin/content/signatures/SkippingParenthesisForConstructorsTest.kt b/plugins/base/src/test/kotlin/content/signatures/ConstructorsSignaturesTest.kt index b6fc4e6b..943d1bc4 100644 --- a/plugins/base/src/test/kotlin/content/signatures/SkippingParenthesisForConstructorsTest.kt +++ b/plugins/base/src/test/kotlin/content/signatures/ConstructorsSignaturesTest.kt @@ -293,4 +293,49 @@ class ConstructorsSignaturesTest : BaseAbstractTest() { } } } + + @Test + fun `should render primary constructor, but not constructors block for annotation class`() { + testInline( + """ + |/src/main/kotlin/test/source.kt + |package test + | + |annotation class MyAnnotation(val param: String) {} + """.trimIndent(), + testConfiguration + ) { + pagesTransformationStage = { module -> + val page = module.children.single { it.name == "test" } + .children.single { it.name == "MyAnnotation" } as ContentPage + page.content.assertNode { + group { + header(1) { +"MyAnnotation" } + platformHinted { + group { + +"annotation class " + link { +"MyAnnotation" } + +"(" + group { + group { + +"val param: " + group { link { +"String" } } + } + } + +")" + } + } + } + group { + group { + header { +"Properties" } + table { + skipAllNotMatching() + } + } + } + } + } + } + } } |