diff options
Diffstat (limited to 'plugins/base/src/main')
3 files changed, 44 insertions, 45 deletions
diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 67e9407f..dfb0d3f7 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -82,39 +82,18 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog } } - private fun actualTypealiasedSignature(c: DClasslike, sourceSet: DokkaSourceSet, aliasedType: Bound): ContentGroup { - @Suppress("UNCHECKED_CAST") - val deprecationStyles = (c as? WithExtraProperties<out Documentable>) - ?.stylesIfDeprecated(sourceSet) - ?: emptySet() - - return contentBuilder.contentFor( - c, - ContentKind.Symbol, - setOf(TextStyle.Monospace), - sourceSets = setOf(sourceSet) - ) { - keyword("actual ") - keyword("typealias ") - link(c.name.orEmpty(), c.dri, styles = mainStyles + deprecationStyles) - operator(" = ") - signatureForProjection(aliasedType) - } - } - private fun classlikeSignature(c: DClasslike): List<ContentNode> { @Suppress("UNCHECKED_CAST") - val typeAliasUnderlyingType = (c as? WithExtraProperties<DClasslike>) + val typeAlias = (c as? WithExtraProperties<DClasslike>) ?.extra ?.get(ActualTypealias) - ?.underlyingType + ?.typeAlias return c.sourceSets.map { sourceSetData -> - val sourceSetType = typeAliasUnderlyingType?.get(sourceSetData) - if (sourceSetType == null) { - regularSignature(c, sourceSetData) + if (typeAlias != null && sourceSetData in typeAlias.sourceSets) { + regularSignature(typeAlias, sourceSetData) } else { - actualTypealiasedSignature(c, sourceSetData, sourceSetType) + regularSignature(c, sourceSetData) } } } @@ -361,27 +340,33 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog private fun signature(t: DTypeAlias) = t.sourceSets.map { - contentBuilder.contentFor(t, sourceSets = setOf(it)) { - t.underlyingType.entries.groupBy({ it.value }, { it.key }).map { (type, platforms) -> - +contentBuilder.contentFor( - t, - ContentKind.Symbol, - setOf(TextStyle.Monospace), - sourceSets = platforms.toSet() - ) { - annotationsBlock(t) - t.visibility[it]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") } - processExtraModifiers(t) - keyword("typealias ") - group(styles = mainStyles + t.stylesIfDeprecated(it)) { - signatureForProjection(t.type) - } - operator(" = ") - signatureForTypealiasTarget(t, type) - } + regularSignature(t, it) + } + + private fun regularSignature( + t: DTypeAlias, + sourceSet: DokkaSourceSet + ) = contentBuilder.contentFor(t, sourceSets = setOf(sourceSet)) { + t.underlyingType.entries.groupBy({ it.value }, { it.key }).map { (type, platforms) -> + +contentBuilder.contentFor( + t, + ContentKind.Symbol, + setOf(TextStyle.Monospace), + sourceSets = platforms.toSet() + ) { + annotationsBlock(t) + t.visibility[sourceSet]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") } + if (t.expectPresentInSet != null) keyword("actual ") + processExtraModifiers(t) + keyword("typealias ") + group(styles = mainStyles + t.stylesIfDeprecated(sourceSet)) { + signatureForProjection(t.type) } + operator(" = ") + signatureForTypealiasTarget(t, type) } } + } private fun signature(t: DTypeParameter) = t.sourceSets.map { diff --git a/plugins/base/src/main/kotlin/transformers/documentables/ActualTypealiasAdder.kt b/plugins/base/src/main/kotlin/transformers/documentables/ActualTypealiasAdder.kt index e895db60..22fc6e9a 100644 --- a/plugins/base/src/main/kotlin/transformers/documentables/ActualTypealiasAdder.kt +++ b/plugins/base/src/main/kotlin/transformers/documentables/ActualTypealiasAdder.kt @@ -6,6 +6,13 @@ import org.jetbrains.dokka.model.properties.WithExtraProperties import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.transformers.documentation.DocumentableTransformer +/** + * Since we can not merge [DClasslike] with [DTypeAlias.underlyingType] and [DTypeAlias.extra], + * we have this transformer to add [ActualTypealias] extra in expect [DClasslike] + * + * The transformer should be applied after merging all documentables + */ +// TODO assign actual [DTypeAlias.expectPresentInSet] an expect source set, currently, [DTypeAlias.expectPresentInSet] always = null class ActualTypealiasAdder : DocumentableTransformer { override fun invoke(original: DModule, context: DokkaContext) = original.generateTypealiasesMap().let { aliases -> @@ -66,30 +73,36 @@ class ActualTypealiasAdder : DocumentableTransformer { elements.map { element -> if (element.expectPresentInSet != null) { typealiases[element.dri]?.let { ta -> - val merged = element.withNewExtras(element.extra + ActualTypealias(ta.underlyingType)).let { + val actualTypealiasExtra = ActualTypealias(ta.copy(expectPresentInSet = element.expectPresentInSet)) + val merged = element.withNewExtras(element.extra + actualTypealiasExtra).let { when (it) { is DClass -> it.copy( documentation = element.documentation + ta.documentation, + sources = element.sources + ta.sources, sourceSets = element.sourceSets + ta.sourceSets ) is DEnum -> it.copy( documentation = element.documentation + ta.documentation, + sources = element.sources + ta.sources, sourceSets = element.sourceSets + ta.sourceSets ) is DInterface -> it.copy( documentation = element.documentation + ta.documentation, + sources = element.sources + ta.sources, sourceSets = element.sourceSets + ta.sourceSets ) is DObject -> it.copy( documentation = element.documentation + ta.documentation, + sources = element.sources + ta.sources, sourceSets = element.sourceSets + ta.sourceSets ) is DAnnotation -> it.copy( documentation = element.documentation + ta.documentation, + sources = element.sources + ta.sources, sourceSets = element.sourceSets + ta.sourceSets ) diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt index 41ab2039..ce4776e7 100644 --- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt @@ -818,6 +818,7 @@ private class DokkaDescriptorVisitor( documentation = resolveDescriptorData(), sourceSets = setOf(sourceSet), generics = generics.await(), + sources = descriptor.createSources(), extra = PropertyContainer.withAll( descriptor.getAnnotations().toSourceSetDependent().toAnnotations(), info.exceptionInSupertypesOrNull(), |