Skip to content

Commit

Permalink
Do not render constructor pages and blocks and for annotation classes (
Browse files Browse the repository at this point in the history
  • Loading branch information
IgnatBeresnev committed Aug 26, 2022
1 parent c37c971 commit 34a8ae1
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
Expand Up @@ -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 }
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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()
Expand Down
Expand Up @@ -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()
}
}
}
}
}
}
}
}

0 comments on commit 34a8ae1

Please sign in to comment.