From 77fa898e8abdc8e74169fa789f2ba0e32d8fa9d7 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Thu, 21 May 2020 11:29:22 +0200 Subject: Apply request changes --- .../main/kotlin/signatures/JvmSignatureUtils.kt | 123 ++++++++++++++++++++ .../main/kotlin/signatures/JvmSingatureUtils.kt | 129 --------------------- .../kotlin/signatures/KotlinSignatureProvider.kt | 5 +- .../main/kotlin/signatures/KotlinSignatureUtils.kt | 9 +- .../main/kotlin/signatures/SignatureProvider.kt | 4 - 5 files changed, 129 insertions(+), 141 deletions(-) create mode 100644 plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt delete mode 100644 plugins/base/src/main/kotlin/signatures/JvmSingatureUtils.kt (limited to 'plugins/base/src/main/kotlin/signatures') diff --git a/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt b/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt new file mode 100644 index 00000000..0ae72109 --- /dev/null +++ b/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt @@ -0,0 +1,123 @@ +package org.jetbrains.dokka.base.signatures + +import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder +import org.jetbrains.dokka.model.* +import org.jetbrains.dokka.model.properties.WithExtraProperties + +interface JvmSignatureUtils { + + fun PageContentBuilder.DocumentableContentBuilder.annotationsBlock(d: Documentable) + + fun PageContentBuilder.DocumentableContentBuilder.annotationsInline(d: Documentable) + + fun WithExtraProperties.modifiers(): Set + + fun Set.toSignatureString(): String = + joinToString("") { it.name.toLowerCase() + " " } + + fun WithExtraProperties.annotations(): List = + extra[Annotations]?.content ?: emptyList() + + private fun Annotations.Annotation.toSignatureString(): String = + "@" + this.dri.classNames + "(" + this.params.entries.joinToString { it.key + "=" + it.value } + ")" + + private fun PageContentBuilder.DocumentableContentBuilder.annotations( + d: Documentable, + ignored: Set, + operation: (Annotations.Annotation) -> Unit + ): Unit = when (d) { + is DFunction -> d.annotations() + is DProperty -> d.annotations() + is DClass -> d.annotations() + is DInterface -> d.annotations() + is DObject -> d.annotations() + is DEnum -> d.annotations() + is DAnnotation -> d.annotations() + is DTypeParameter -> d.annotations() + is DEnumEntry -> d.annotations() + is DTypeAlias -> d.annotations() + is DParameter -> d.annotations() + else -> null + }?.let { + it.filter { it !in ignored }.forEach { + operation(it) + } + } ?: Unit + + fun PageContentBuilder.DocumentableContentBuilder.toSignatureString( + a: Annotations.Annotation, + renderAtStrategy: AtStrategy, + listBrackets: Pair, + classExtension: String + ) { + when (renderAtStrategy) { + is All, is OnlyOnce -> text("@") + is Never -> Unit + } + link(a.dri.classNames!!, a.dri) + text("(") + a.params.entries.forEachIndexed { i, it -> + text(it.key + " = ") + when (renderAtStrategy) { + is All -> All + is Never, is OnlyOnce -> Never + }.let { strategy -> + valueToSignature(it.value, strategy, listBrackets, classExtension) + } + if (i != a.params.entries.size - 1) text(", ") + } + text(")") + } + + private fun PageContentBuilder.DocumentableContentBuilder.valueToSignature( + a: AnnotationParameterValue, + renderAtStrategy: AtStrategy, + listBrackets: Pair, + classExtension: String + ): Unit = when (a) { + is AnnotationValue -> toSignatureString(a.annotation, renderAtStrategy, listBrackets, classExtension) + is ArrayValue -> { + text(listBrackets.first.toString()) + a.value.forEachIndexed { i, it -> + valueToSignature(it, renderAtStrategy, listBrackets, classExtension) + if (i != a.value.size - 1) text(", ") + } + text(listBrackets.second.toString()) + } + is EnumValue -> link(a.enumName, a.enumDri) + is ClassValue -> link(a.className + classExtension, a.classDRI) + is StringValue -> text(a.value) + } + + fun PageContentBuilder.DocumentableContentBuilder.annotationsBlockWithIgnored( + d: Documentable, + ignored: Set, + renderAtStrategy: AtStrategy, + listBrackets: Pair, + classExtension: String + ) { + annotations(d, ignored) { + group { + toSignatureString(it, renderAtStrategy, listBrackets, classExtension) + } + } + } + + fun PageContentBuilder.DocumentableContentBuilder.annotationsInlineWithIgnored( + d: Documentable, + ignored: Set, + renderAtStrategy: AtStrategy, + listBrackets: Pair, + classExtension: String + ) { + annotations(d, ignored) { + toSignatureString(it, renderAtStrategy, listBrackets, classExtension) + text(Typography.nbsp.toString()) + } + } +} + +sealed class AtStrategy +object All : AtStrategy() +object OnlyOnce : AtStrategy() +object Never : AtStrategy() \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/signatures/JvmSingatureUtils.kt b/plugins/base/src/main/kotlin/signatures/JvmSingatureUtils.kt deleted file mode 100644 index dde553b9..00000000 --- a/plugins/base/src/main/kotlin/signatures/JvmSingatureUtils.kt +++ /dev/null @@ -1,129 +0,0 @@ -package org.jetbrains.dokka.base.signatures - -import javaslang.Tuple2 -import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder -import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.properties.WithExtraProperties - -interface JvmSingatureUtils { - - fun PageContentBuilder.DocumentableContentBuilder.annotationsBlock(d: Documentable) - - fun PageContentBuilder.DocumentableContentBuilder.annotationsInline(d: Documentable) - - fun WithExtraProperties.modifiers(): Set - - fun Set.toSignatureString(): String = - joinToString("") { it.name.toLowerCase() + " " } - - fun WithExtraProperties.annotations(): List = - extra[Annotations]?.content ?: emptyList() - - private fun Annotations.Annotation.toSignatureString(): String = - "@${this.dri.classNames}(${this.params.entries.joinToString { it.key + "=" + it.value }})" - - private fun PageContentBuilder.DocumentableContentBuilder.annotations( - d: Documentable, - ignored: Set, - operation: (Annotations.Annotation) -> Unit - ): Unit = when (d) { - is DFunction -> d.annotations() - is DProperty -> d.annotations() - is DClass -> d.annotations() - is DInterface -> d.annotations() - is DObject -> d.annotations() - is DEnum -> d.annotations() - is DAnnotation -> d.annotations() - is DTypeParameter -> d.annotations() - is DEnumEntry -> d.annotations() - is DTypeAlias -> d.annotations() - is DParameter -> d.annotations() - else -> null - }?.let { - it.filter { it !in ignored }.forEach { - operation(it) - } - } ?: Unit - - fun WithExtraProperties.modifiersWithFilter( - filter: Set = ExtraModifiers.values().toSet() - ): Set = - extra[AdditionalModifiers]?.content?.filter { it in filter }?.toSet() ?: emptySet() - - fun PageContentBuilder.DocumentableContentBuilder.toSignatureString( - a: Annotations.Annotation, - renderAtStrategy: AtStrategy, - listBrackets: Tuple2, - classExtension: String - ) { - when (renderAtStrategy) { - is All, is OnlyOnce -> text("@") - is Never -> Unit - } - link(a.dri.classNames!!, a.dri) - text("(") - a.params.entries.forEachIndexed { i, it -> - text(it.key + " = ") - when (renderAtStrategy) { - is All -> All - is Never, is OnlyOnce -> Never - }.let { strategy -> - valueToSignature(it.value, strategy, listBrackets, classExtension) - } - if (i != a.params.entries.size - 1) text(", ") - } - text(")") - } - - private fun PageContentBuilder.DocumentableContentBuilder.valueToSignature( - a: AnnotationParameterValue, - renderAtStrategy: AtStrategy, - listBrackets: Tuple2, - classExtension: String - ): Unit = when (a) { - is AnnotationValue -> toSignatureString(a.annotation, renderAtStrategy, listBrackets, classExtension) - is ArrayValue -> { - text(listBrackets._1.toString()) - a.value.forEachIndexed { i, it -> - valueToSignature(it, renderAtStrategy, listBrackets, classExtension) - if (i != a.value.size - 1) text(", ") - } - text(listBrackets._2.toString()) - } - is EnumValue -> link(a.enumName, a.enumDri) - is ClassValue -> link(a.className + classExtension, a.classDRI) - is StringValue -> text(a.value) - } - - fun PageContentBuilder.DocumentableContentBuilder.annotationsBlockWithIgnored( - d: Documentable, - ignored: Set, - renderAtStrategy: AtStrategy, - listBrackets: Tuple2, - classExtension: String - ) { - annotations(d, ignored) { - group { - toSignatureString(it, renderAtStrategy, listBrackets, classExtension) - } - } - } - - fun PageContentBuilder.DocumentableContentBuilder.annotationsInlineWithIgnored( - d: Documentable, - ignored: Set, - renderAtStrategy: AtStrategy, - listBrackets: Tuple2, - classExtension: String - ) { - annotations(d, ignored) { - toSignatureString(it, renderAtStrategy, listBrackets, classExtension) - text(Typography.nbsp.toString()) - } - } -} - -sealed class AtStrategy -object All : AtStrategy() -object OnlyOnce : AtStrategy() -object Never : AtStrategy() \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 4c689abc..33c82458 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -6,7 +6,6 @@ import org.jetbrains.dokka.links.* import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.Nullable import org.jetbrains.dokka.model.TypeConstructor -import org.jetbrains.dokka.model.properties.ExtraProperty import org.jetbrains.dokka.model.properties.WithExtraProperties import org.jetbrains.dokka.pages.ContentKind import org.jetbrains.dokka.pages.ContentNode @@ -15,7 +14,7 @@ import org.jetbrains.dokka.utilities.DokkaLogger import kotlin.text.Typography.nbsp class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLogger) : SignatureProvider, - JvmSingatureUtils by KotlinSignatureUtils { + JvmSignatureUtils by KotlinSignatureUtils { private val contentBuilder = PageContentBuilder(ctcc, this, logger) private val ignoredVisibilities = setOf(JavaVisibility.Public, KotlinVisibility.Public) @@ -69,7 +68,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog if (c is DClass) { platformText(c.modifier, sourceSets) { if (it !in ignoredModifiers) - if (c.extra[AdditionalModifiers]?.content?.contains(ExtraModifiers.DATA) == true) "" + if (c.extra[AdditionalModifiers]?.content?.contains(ExtraModifiers.KotlinOnlyModifiers.Data) == true) "" else (if (it is JavaModifier.Empty) KotlinModifier.Open else it).let { it.name + " " } else "" diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureUtils.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureUtils.kt index 3ce4be0a..48cfe304 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureUtils.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureUtils.kt @@ -1,16 +1,15 @@ package org.jetbrains.dokka.base.signatures -import javaslang.Tuple2 import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder +import org.jetbrains.dokka.model.AdditionalModifiers import org.jetbrains.dokka.model.Documentable import org.jetbrains.dokka.model.ExtraModifiers -import org.jetbrains.dokka.model.ExtraModifiers.Companion.kotlinOnlyModifiers import org.jetbrains.dokka.model.properties.WithExtraProperties -object KotlinSignatureUtils : JvmSingatureUtils { +object KotlinSignatureUtils : JvmSignatureUtils { private val strategy = OnlyOnce - private val listBrackets = Tuple2('[', ']') + private val listBrackets = Pair('[', ']') private val classExtension = "::class" override fun PageContentBuilder.DocumentableContentBuilder.annotationsBlock(d: Documentable) = @@ -20,5 +19,5 @@ object KotlinSignatureUtils : JvmSingatureUtils { annotationsInlineWithIgnored(d, emptySet(), strategy, listBrackets, classExtension) override fun WithExtraProperties.modifiers() = - modifiersWithFilter(kotlinOnlyModifiers) + extra[AdditionalModifiers]?.content?.filterIsInstance()?.toSet() ?: emptySet() } \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/signatures/SignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/SignatureProvider.kt index 7d7995b7..c04b6ecf 100644 --- a/plugins/base/src/main/kotlin/signatures/SignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/SignatureProvider.kt @@ -1,11 +1,7 @@ package org.jetbrains.dokka.base.signatures -import javaslang.Tuple2 -import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.properties.WithExtraProperties import org.jetbrains.dokka.pages.ContentNode -import org.jetbrains.dokka.pages.TextStyle interface SignatureProvider { fun signature(documentable: Documentable): ContentNode -- cgit