From 098964618d52d6d9fcb511e300c9519475dee213 Mon Sep 17 00:00:00 2001 From: vmishenev Date: Mon, 18 Apr 2022 21:03:43 +0300 Subject: [PATCH] Make a default value dependent on source set --- core/api/core.api | 4 ++-- core/src/main/kotlin/model/defaultValues.kt | 6 ++++-- .../signatures/KotlinSignatureProvider.kt | 17 ++++++++++------- ...DefaultDescriptorToDocumentableTranslator.kt | 4 ++-- .../base/src/test/kotlin/model/FunctionsTest.kt | 4 ++-- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/core/api/core.api b/core/api/core.api index 74b4b4229f..1bb24c42b8 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -1385,9 +1385,9 @@ public final class org/jetbrains/dokka/model/DTypeParameter : org/jetbrains/dokk public final class org/jetbrains/dokka/model/DefaultValue : org/jetbrains/dokka/model/properties/ExtraProperty { public static final field Companion Lorg/jetbrains/dokka/model/DefaultValue$Companion; - public fun (Lorg/jetbrains/dokka/model/Expression;)V + public fun (Ljava/util/Map;)V public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key; - public final fun getValue ()Lorg/jetbrains/dokka/model/Expression; + public final fun getValue ()Ljava/util/Map; } public final class org/jetbrains/dokka/model/DefaultValue$Companion : org/jetbrains/dokka/model/properties/ExtraProperty$Key { diff --git a/core/src/main/kotlin/model/defaultValues.kt b/core/src/main/kotlin/model/defaultValues.kt index d9caecd9db..16e34a9f99 100644 --- a/core/src/main/kotlin/model/defaultValues.kt +++ b/core/src/main/kotlin/model/defaultValues.kt @@ -3,9 +3,11 @@ package org.jetbrains.dokka.model import org.jetbrains.dokka.model.properties.ExtraProperty import org.jetbrains.dokka.model.properties.MergeStrategy -class DefaultValue(val value: Expression): ExtraProperty { +class DefaultValue(val value: SourceSetDependent): ExtraProperty { companion object : ExtraProperty.Key { - override fun mergeStrategyFor(left: DefaultValue, right: DefaultValue): MergeStrategy = MergeStrategy.Remove // TODO pass a logger somehow and log this + override fun mergeStrategyFor(left: DefaultValue, right: DefaultValue): MergeStrategy = + MergeStrategy.Replace(DefaultValue(left.value + right.value)) + } override val key: ExtraProperty.Key diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 3c9daa2942..9d2a0a8ad4 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -13,7 +13,10 @@ import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.Nullable import org.jetbrains.dokka.model.TypeConstructor import org.jetbrains.dokka.model.properties.WithExtraProperties -import org.jetbrains.dokka.pages.* +import org.jetbrains.dokka.pages.ContentKind +import org.jetbrains.dokka.pages.ContentNode +import org.jetbrains.dokka.pages.TextStyle +import org.jetbrains.dokka.pages.TokenStyle import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle @@ -197,9 +200,9 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog text(param.name.orEmpty()) operator(": ") signatureForProjection(param.type) - param.extra[DefaultValue]?.let { + param.extra[DefaultValue]?.value?.get(sourceSet)?.let { expr -> operator(" = ") - highlightValue(it.value) + highlightValue(expr) } } punctuation(")") @@ -256,9 +259,9 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog link(p.name, p.dri) operator(": ") signatureForProjection(p.type) - p.extra[DefaultValue]?.run { + p.extra[DefaultValue]?.value?.get(it)?.let { expr -> operator(" = ") - highlightValue(value) + highlightValue(expr) } } } @@ -312,9 +315,9 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog text(param.name!!) operator(": ") signatureForProjection(param.type) - param.extra[DefaultValue]?.run { + param.extra[DefaultValue]?.value?.get(it)?.let { expr -> operator(" = ") - highlightValue(value) + highlightValue(expr) } } } diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt index 6bc8774da0..918489638e 100644 --- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt @@ -467,7 +467,7 @@ private class DokkaDescriptorVisitor( .toAdditionalExtras()).toSet().toSourceSetDependent().toAdditionalModifiers(), (descriptor.getAnnotationsWithBackingField() + descriptor.fileLevelAnnotations()).toSourceSetDependent() .toAnnotations(), - descriptor.getDefaultValue()?.let { DefaultValue(it) }, + descriptor.getDefaultValue()?.let { DefaultValue(it.toSourceSetDependent()) }, InheritedMember(inheritedFrom.toSourceSetDependent()), ) ) @@ -712,7 +712,7 @@ private class DokkaDescriptorVisitor( extra = PropertyContainer.withAll(listOfNotNull( descriptor.additionalExtras().toSourceSetDependent().toAdditionalModifiers(), descriptor.getAnnotations().toSourceSetDependent().toAnnotations(), - descriptor.getDefaultValue()?.let { DefaultValue(it) } + descriptor.getDefaultValue()?.let { DefaultValue(it.toSourceSetDependent()) } )) ) diff --git a/plugins/base/src/test/kotlin/model/FunctionsTest.kt b/plugins/base/src/test/kotlin/model/FunctionsTest.kt index 29c81a6593..90924195f0 100644 --- a/plugins/base/src/test/kotlin/model/FunctionsTest.kt +++ b/plugins/base/src/test/kotlin/model/FunctionsTest.kt @@ -344,7 +344,7 @@ class FunctionTest : AbstractModelTest("/src/main/kotlin/function/Test.kt", "fun parameters.forEach { p -> p.name equals "x" p.type.name.assertNotNull("Parameter type: ") equals "String" - p.extra[DefaultValue]?.value equals StringConstant("") + p.extra[DefaultValue]?.value?.get(sourceSets.single()) equals StringConstant("") } } } @@ -363,7 +363,7 @@ class FunctionTest : AbstractModelTest("/src/main/kotlin/function/Test.kt", "fun parameters.forEach { p -> p.name equals "x" p.type.name.assertNotNull("Parameter type: ") equals "Float" - p.extra[DefaultValue]?.value equals FloatConstant(3.14f) + p.extra[DefaultValue]?.value?.get(sourceSets.single()) equals FloatConstant(3.14f) } } }