From 50a3323322265ff3b5dab1d861a25bbb1167812a Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Thu, 18 Aug 2022 19:33:53 +0200 Subject: Add deprecation details block (#2622) --- .../src/main/kotlin/renderers/html/HtmlRenderer.kt | 3 + .../renderers/html/NavigationDataProvider.kt | 35 +- .../main/kotlin/renderers/html/NavigationPage.kt | 17 +- .../main/kotlin/signatures/JvmSignatureUtils.kt | 3 + .../kotlin/signatures/KotlinSignatureProvider.kt | 39 +- .../main/kotlin/signatures/KotlinSignatureUtils.kt | 15 +- .../kotlin/transformers/documentables/utils.kt | 22 +- .../merger/SameMethodNamePageMergerStrategy.kt | 14 +- .../documentables/DefaultPageCreator.kt | 2 + .../documentables/DeprecationSectionCreator.kt | 190 ++++++++++ .../documentables/PageContentBuilder.kt | 4 + .../base/src/main/resources/dokka/styles/style.css | 33 ++ .../annotations/DepredatedAndSinceKotlinTest.kt | 103 ------ .../content/annotations/JavaDeprecatedTest.kt | 139 ++++++++ .../content/annotations/KotlinDeprecatedTest.kt | 395 +++++++++++++++++++++ .../kotlin/content/annotations/SinceKotlinTest.kt | 61 ++++ .../test/kotlin/renderers/html/NavigationTest.kt | 109 +++++- plugins/base/src/test/kotlin/utils/contentUtils.kt | 4 +- 18 files changed, 1046 insertions(+), 142 deletions(-) create mode 100644 plugins/base/src/main/kotlin/translators/documentables/DeprecationSectionCreator.kt delete mode 100644 plugins/base/src/test/kotlin/content/annotations/DepredatedAndSinceKotlinTest.kt create mode 100644 plugins/base/src/test/kotlin/content/annotations/JavaDeprecatedTest.kt create mode 100644 plugins/base/src/test/kotlin/content/annotations/KotlinDeprecatedTest.kt create mode 100644 plugins/base/src/test/kotlin/content/annotations/SinceKotlinTest.kt (limited to 'plugins/base/src') diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt index 945fff38..f5c3854c 100644 --- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt +++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt @@ -95,6 +95,7 @@ open class HtmlRenderer( childrenCallback() } node.hasStyle(ContentStyle.KDocTag) -> span("kdoc-tag") { childrenCallback() } + node.hasStyle(ContentStyle.Footnote) -> div("footnote") { childrenCallback() } node.hasStyle(TextStyle.BreakableAfter) -> { span { childrenCallback() } wbr { } @@ -124,10 +125,12 @@ open class HtmlRenderer( node.dci.kind == ContentKind.Cover -> div("cover $additionalClasses") { //TODO this can be removed childrenCallback() } + node.dci.kind == ContentKind.Deprecation -> div("deprecation-content") { childrenCallback() } node.hasStyle(TextStyle.Paragraph) -> p(additionalClasses) { childrenCallback() } node.hasStyle(TextStyle.Block) -> div(additionalClasses) { childrenCallback() } node.hasStyle(TextStyle.Quotation) -> blockQuote(additionalClasses) { childrenCallback() } node.hasStyle(TextStyle.FloatingRight) -> span("clearfix") { span("floating-right") { childrenCallback() } } + node.hasStyle(TextStyle.Strikethrough) -> strike { childrenCallback() } node.isAnchorable -> buildAnchor( node.anchor!!, node.anchorLabel!!, diff --git a/plugins/base/src/main/kotlin/renderers/html/NavigationDataProvider.kt b/plugins/base/src/main/kotlin/renderers/html/NavigationDataProvider.kt index 958488ef..ecce70e8 100644 --- a/plugins/base/src/main/kotlin/renderers/html/NavigationDataProvider.kt +++ b/plugins/base/src/main/kotlin/renderers/html/NavigationDataProvider.kt @@ -1,6 +1,8 @@ package org.jetbrains.dokka.base.renderers.html import org.jetbrains.dokka.base.renderers.sourceSets +import org.jetbrains.dokka.base.signatures.KotlinSignatureUtils.annotations +import org.jetbrains.dokka.base.transformers.documentables.isDeprecated import org.jetbrains.dokka.base.transformers.documentables.isException import org.jetbrains.dokka.base.translators.documentables.DocumentableLanguage import org.jetbrains.dokka.base.translators.documentables.documentableLanguage @@ -17,6 +19,7 @@ abstract class NavigationDataProvider { dri = page.dri.first(), sourceSets = page.sourceSets(), icon = chooseNavigationIcon(page), + styles = chooseStyles(page), children = page.navigableChildren() ) @@ -31,8 +34,8 @@ abstract class NavigationDataProvider { name } - private fun chooseNavigationIcon(contentPage: ContentPage): NavigationNodeIcon? { - return if (contentPage is WithDocumentables) { + private fun chooseNavigationIcon(contentPage: ContentPage): NavigationNodeIcon? = + if (contentPage is WithDocumentables) { val documentable = contentPage.documentables.firstOrNull() val isJava = documentable?.hasAnyJavaSources() ?: false @@ -61,27 +64,41 @@ abstract class NavigationDataProvider { } else { null } - } private fun Documentable.hasAnyJavaSources(): Boolean { val withSources = this as? WithSources ?: return false return this.sourceSets.any { withSources.documentableLanguage(it) == DocumentableLanguage.JAVA } } - private fun DClass.isAbstract(): Boolean { - return modifier.values.all { it is KotlinModifier.Abstract || it is JavaModifier.Abstract } + private fun DClass.isAbstract() = + modifier.values.all { it is KotlinModifier.Abstract || it is JavaModifier.Abstract } + + private fun chooseStyles(page: ContentPage): Set