aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/translators/descriptors
diff options
context:
space:
mode:
authorBłażej Kardyś <bkardys@virtuslab.com>2020-05-05 17:45:12 +0200
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-05-14 13:30:33 +0200
commit3f2a790190da4f40ea6d8a976aa1929b2a1b002b (patch)
tree752ee84451954e9ea5e6d4133e18e41aaee2f7b1 /plugins/base/src/main/kotlin/translators/descriptors
parenta440f0cb8756019131a2c15389e747aea3c585e7 (diff)
downloaddokka-3f2a790190da4f40ea6d8a976aa1929b2a1b002b.tar.gz
dokka-3f2a790190da4f40ea6d8a976aa1929b2a1b002b.tar.bz2
dokka-3f2a790190da4f40ea6d8a976aa1929b2a1b002b.zip
Changing approach from platform-driven to source-set-driven
Diffstat (limited to 'plugins/base/src/main/kotlin/translators/descriptors')
-rw-r--r--plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt252
1 files changed, 120 insertions, 132 deletions
diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
index 128b9bd4..7cc96a24 100644
--- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
+++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt
@@ -7,7 +7,6 @@ import org.jetbrains.dokka.links.withClass
import org.jetbrains.dokka.model.*
import org.jetbrains.dokka.model.doc.*
import org.jetbrains.dokka.model.properties.PropertyContainer
-import org.jetbrains.dokka.pages.PlatformData
import org.jetbrains.dokka.parsers.MarkdownParser
import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.utilities.DokkaLogger
@@ -20,6 +19,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies
import org.jetbrains.kotlin.idea.kdoc.findKDoc
+import org.jetbrains.kotlin.load.kotlin.toSourceElement
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.components.isVararg
@@ -37,35 +37,35 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
object DefaultDescriptorToDocumentableTranslator : SourceToDocumentableTranslator {
- override fun invoke(platformData: PlatformData, context: DokkaContext): DModule {
+ override fun invoke(sourceSet: SourceSetData, context: DokkaContext): DModule {
- val (environment, facade) = context.platforms.getValue(platformData)
+ val (environment, facade) = context.platforms.getValue(sourceSet)
val packageFragments = environment.getSourceFiles().asSequence()
.map { it.packageFqName }
.distinct()
.mapNotNull { facade.resolveSession.getPackageFragment(it) }
.toList()
- return DokkaDescriptorVisitor(platformData, context.platforms.getValue(platformData).facade, context.logger).run {
+ return DokkaDescriptorVisitor(sourceSet, context.platforms.getValue(sourceSet).facade, context.logger).run {
packageFragments.mapNotNull { it.safeAs<PackageFragmentDescriptor>() }.map {
visitPackageFragmentDescriptor(
it,
- DRIWithPlatformInfo(DRI.topLevel, PlatformDependent.empty())
+ DRIWithPlatformInfo(DRI.topLevel, emptyMap())
)
}
- }.let { DModule(platformData.name, it, PlatformDependent.empty(), listOf(platformData)) }
+ }.let { DModule(sourceSet.moduleName, it, emptyMap(), null, listOf(sourceSet)) }
}
}
data class DRIWithPlatformInfo(
val dri: DRI,
- val actual: PlatformDependent<DocumentableSource>
+ val actual: SourceSetDependent<DocumentableSource>
)
-fun DRI.withEmptyInfo() = DRIWithPlatformInfo(this, PlatformDependent.empty())
+fun DRI.withEmptyInfo() = DRIWithPlatformInfo(this, emptyMap())
private class DokkaDescriptorVisitor(
- private val platformData: PlatformData,
+ private val sourceSet: SourceSetData,
private val resolutionFacade: DokkaResolutionFacade,
private val logger: DokkaLogger
) : DeclarationDescriptorVisitorEmptyBodies<Documentable, DRIWithPlatformInfo>() {
@@ -73,23 +73,30 @@ private class DokkaDescriptorVisitor(
throw IllegalStateException("${javaClass.simpleName} should never enter ${descriptor.javaClass.simpleName}")
}
+ private fun Collection<DeclarationDescriptor>.filterDescriptorsInSourceSet() = filter {
+ val path = it.toSourceElement.containingFile.toString()
+ path.isNotBlank() && sourceSet.sourceRoots.any { root -> path.startsWith(root.path) }
+ }
+
+ private fun <T> T.toSourceSetDependent() = mapOf(sourceSet to this)
+
override fun visitPackageFragmentDescriptor(
descriptor: PackageFragmentDescriptor,
parent: DRIWithPlatformInfo
): DPackage {
- val name = descriptor.fqName.asString().takeUnless { it.isBlank() }
- ?: "[" + platformData.targets.joinToString(" ") + " root]"// TODO: error-prone, find a better way to do it
+ val name = descriptor.fqName.asString().takeUnless { it.isBlank() } ?:
+ "[${sourceSet.sourceSetName} root]"// TODO: error-prone, find a better way to do it
val driWithPlatform = DRI(packageName = name).withEmptyInfo()
val scope = descriptor.getMemberScope()
return DPackage(
dri = driWithPlatform.dri,
- functions = scope.functions(driWithPlatform),
- properties = scope.properties(driWithPlatform),
- classlikes = scope.classlikes(driWithPlatform),
- typealiases = scope.typealiases(driWithPlatform),
- documentation = descriptor.resolveDescriptorData(platformData),
- platformData = listOf(platformData)
+ functions = scope.functions(driWithPlatform, true),
+ properties = scope.properties(driWithPlatform, true),
+ classlikes = scope.classlikes(driWithPlatform, true),
+ typealiases = scope.typealiases(driWithPlatform, true),
+ documentation = descriptor.resolveDescriptorData(),
+ sourceSets = listOf(sourceSet)
)
}
@@ -106,7 +113,7 @@ private class DokkaDescriptorVisitor(
val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo()
val scope = descriptor.unsubstitutedMemberScope
val isExpect = descriptor.isExpect
- val info = descriptor.resolveClassDescriptionData(if (!isExpect) platformData else null)
+ val info = descriptor.resolveClassDescriptionData()
return DInterface(
@@ -116,14 +123,13 @@ private class DokkaDescriptorVisitor(
properties = scope.properties(driWithPlatform),
classlikes = scope.classlikes(driWithPlatform),
sources = descriptor.createSources(),
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- supertypes = if (isExpect) PlatformDependent.expectFrom(info.supertypes)
- else PlatformDependent.from(platformData, info.supertypes),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ supertypes = info.supertypes.toSourceSetDependent(),
documentation = info.docs,
generics = descriptor.typeConstructor.parameters.map { it.toTypeParameter() },
companion = descriptor.companion(driWithPlatform),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -132,7 +138,7 @@ private class DokkaDescriptorVisitor(
val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo()
val scope = descriptor.unsubstitutedMemberScope
val isExpect = descriptor.isExpect
- val info = descriptor.resolveClassDescriptionData(if (!isExpect) platformData else null)
+ val info = descriptor.resolveClassDescriptionData()
return DObject(
@@ -142,12 +148,11 @@ private class DokkaDescriptorVisitor(
properties = scope.properties(driWithPlatform),
classlikes = scope.classlikes(driWithPlatform),
sources = descriptor.createSources(),
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- supertypes = if (isExpect) PlatformDependent.expectFrom(info.supertypes)
- else PlatformDependent.from(platformData, info.supertypes),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ supertypes = info.supertypes.toSourceSetDependent(),
documentation = info.docs,
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -156,7 +161,7 @@ private class DokkaDescriptorVisitor(
val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo()
val scope = descriptor.unsubstitutedMemberScope
val isExpect = descriptor.isExpect
- val info = descriptor.resolveClassDescriptionData(if (!isExpect) platformData else null)
+ val info = descriptor.resolveClassDescriptionData()
return DEnum(
dri = driWithPlatform.dri,
@@ -167,13 +172,12 @@ private class DokkaDescriptorVisitor(
properties = scope.properties(driWithPlatform),
classlikes = scope.classlikes(driWithPlatform),
sources = descriptor.createSources(),
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- supertypes = if (isExpect) PlatformDependent.expectFrom(info.supertypes)
- else PlatformDependent.from(platformData, info.supertypes),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ supertypes = info.supertypes.toSourceSetDependent(),
documentation = info.docs,
companion = descriptor.companion(driWithPlatform),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -186,11 +190,12 @@ private class DokkaDescriptorVisitor(
return DEnumEntry(
dri = driWithPlatform.dri,
name = descriptor.name.asString(),
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null),
+ documentation = descriptor.resolveDescriptorData(),
classlikes = scope.classlikes(driWithPlatform),
functions = scope.functions(driWithPlatform),
properties = scope.properties(driWithPlatform),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -202,14 +207,15 @@ private class DokkaDescriptorVisitor(
return DAnnotation(
dri = driWithPlatform.dri,
name = descriptor.name.asString(),
- documentation = descriptor.resolveDescriptorData(platformData),
+ documentation = descriptor.resolveDescriptorData(),
classlikes = scope.classlikes(driWithPlatform),
functions = scope.functions(driWithPlatform),
properties = scope.properties(driWithPlatform),
- platformData = listOf(platformData),
+ expectPresentInSet = null,
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations()),
companion = descriptor.companionObjectDescriptor?.let { objectDescriptor(it, driWithPlatform) },
- visibility = PlatformDependent(mapOf(platformData to descriptor.visibility.toDokkaVisibility())),
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
constructors = descriptor.constructors.map { visitConstructorDescriptor(it, driWithPlatform) },
sources = descriptor.createSources()
)
@@ -219,7 +225,7 @@ private class DokkaDescriptorVisitor(
val driWithPlatform = parent.dri.withClass(descriptor.name.asString()).withEmptyInfo()
val scope = descriptor.unsubstitutedMemberScope
val isExpect = descriptor.isExpect
- val info = descriptor.resolveClassDescriptionData(if (!isExpect) platformData else null)
+ val info = descriptor.resolveClassDescriptionData()
val actual = descriptor.createSources()
return DClass(
@@ -229,23 +235,21 @@ private class DokkaDescriptorVisitor(
visitConstructorDescriptor(
it,
if (it.isPrimary) DRIWithPlatformInfo(driWithPlatform.dri, actual)
- else DRIWithPlatformInfo(driWithPlatform.dri, PlatformDependent.empty())
+ else DRIWithPlatformInfo(driWithPlatform.dri, emptyMap())
)
},
functions = scope.functions(driWithPlatform),
properties = scope.properties(driWithPlatform),
classlikes = scope.classlikes(driWithPlatform),
sources = actual,
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- supertypes = if (isExpect) PlatformDependent.expectFrom(info.supertypes)
- else PlatformDependent.from(platformData, info.supertypes),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ supertypes = info.supertypes.toSourceSetDependent(),
generics = descriptor.typeConstructor.parameters.map { it.toTypeParameter() },
documentation = info.docs,
- modifier = if (isExpect) PlatformDependent.expectFrom(descriptor.modifier())
- else PlatformDependent.from(platformData, descriptor.modifier()),
+ modifier = descriptor.modifier().toSourceSetDependent(),
companion = descriptor.companion(driWithPlatform),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -268,13 +272,12 @@ private class DokkaDescriptorVisitor(
setter = descriptor.accessors.filterIsInstance<PropertySetterDescriptor>().singleOrNull()?.let {
visitPropertyAccessorDescriptor(it, descriptor, dri)
},
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null),
- modifier = if (isExpect) PlatformDependent.expectFrom(descriptor.modifier())
- else PlatformDependent.from(platformData, descriptor.modifier()),
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ documentation = descriptor.resolveDescriptorData(),
+ modifier = descriptor.modifier().toSourceSetDependent(),
type = descriptor.returnType!!.toBound(),
- platformData = listOf(platformData),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ sourceSets = listOf(sourceSet),
generics = descriptor.typeParameters.map { it.toTypeParameter() },
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
@@ -301,15 +304,14 @@ private class DokkaDescriptorVisitor(
parameters = descriptor.valueParameters.mapIndexed { index, desc ->
parameter(index, desc, DRIWithPlatformInfo(dri, actual))
},
+ expectPresentInSet = sourceSet.takeIf { isExpect },
sources = actual,
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
generics = descriptor.typeParameters.map { it.toTypeParameter() },
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null),
- modifier = if (isExpect) PlatformDependent.expectFrom(descriptor.modifier())
- else PlatformDependent.from(platformData, descriptor.modifier()),
+ documentation = descriptor.resolveDescriptorData(),
+ modifier = descriptor.modifier().toSourceSetDependent(),
type = descriptor.returnType!!.toBound(),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(
InheritedFunction(isInherited),
descriptor.additionalExtras(), descriptor.getAnnotations()
@@ -333,41 +335,27 @@ private class DokkaDescriptorVisitor(
parameter(index, desc, DRIWithPlatformInfo(dri, actual))
},
sources = actual,
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null).let {
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ documentation = descriptor.resolveDescriptorData().let { sourceSetDependent ->
if (descriptor.isPrimary) {
- it.copy(
- map = PlatformDependent.from(it.map.map {
- Pair(
- it.key,
- it.value.copy(children = (it.value.children.find { it is Constructor }?.root?.let { constructor ->
- listOf(
- Description(constructor)
- )
- } ?: emptyList<TagWrapper>()) + it.value.children.filterIsInstance<Param>())
- )
- }),
- expect = it.expect?.copy(children = (it.expect?.children?.find { it is Constructor }?.root?.let { constructor ->
- listOf(
- Description(constructor)
- )
- } ?: emptyList<TagWrapper>()) + it.expect!!.children.filterIsInstance<Param>())
- )
+ sourceSetDependent.map { entry ->
+ Pair(entry.key, entry.value.copy(children = (entry.value.children.find { it is Constructor }?.root?.let { constructor ->
+ listOf( Description(constructor) )
+ } ?: emptyList<TagWrapper>()) + entry.value.children.filterIsInstance<Param>()))
+ }.toMap()
} else {
- it
+ sourceSetDependent
}
},
type = descriptor.returnType.toBound(),
- modifier = if (isExpect) PlatformDependent.expectFrom(descriptor.modifier())
- else PlatformDependent.from(platformData, descriptor.modifier()),
+ modifier = descriptor.modifier().toSourceSetDependent(),
generics = descriptor.typeParameters.map { it.toTypeParameter() },
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll<DFunction>(descriptor.additionalExtras(), descriptor.getAnnotations())
.let {
- if (descriptor.isPrimary) {
- it + PrimaryConstructorExtra
- } else it
+ if(descriptor.isPrimary) { it + PrimaryConstructorExtra }
+ else it
}
)
}
@@ -379,8 +367,9 @@ private class DokkaDescriptorVisitor(
dri = parent.dri.copy(target = 0),
name = null,
type = descriptor.type.toBound(),
- documentation = descriptor.resolveDescriptorData(platformData),
- platformData = listOf(platformData)
+ expectPresentInSet = null,
+ documentation = descriptor.resolveDescriptorData(),
+ sourceSets = listOf(sourceSet)
)
private fun visitPropertyAccessorDescriptor(
@@ -397,8 +386,9 @@ private class DokkaDescriptorVisitor(
parent.copy(target = 1),
this.name.asString(),
type = this.type.toBound(),
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null),
- platformData = listOf(platformData),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
+ documentation = descriptor.resolveDescriptorData(),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
@@ -420,13 +410,12 @@ private class DokkaDescriptorVisitor(
name,
isConstructor = false,
parameters = parameters,
- visibility = if (isExpect) PlatformDependent.expectFrom(descriptor.visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, descriptor.visibility.toDokkaVisibility()),
- documentation = descriptor.resolveDescriptorData(if (!isExpect) platformData else null),
+ visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
+ documentation = descriptor.resolveDescriptorData(),
type = descriptor.returnType!!.toBound(),
generics = descriptor.typeParameters.map { it.toTypeParameter() },
- modifier = if (isExpect) PlatformDependent.expectFrom(descriptor.modifier())
- else PlatformDependent.from(platformData, descriptor.modifier()),
+ modifier = descriptor.modifier().toSourceSetDependent(),
+ expectPresentInSet = sourceSet.takeIf { isExpect },
receiver = descriptor.extensionReceiverParameter?.let {
visitReceiverParameterDescriptor(
it,
@@ -434,7 +423,7 @@ private class DokkaDescriptorVisitor(
)
},
sources = descriptor.createSources(),
- platformData = listOf(platformData),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations())
)
}
@@ -445,11 +434,11 @@ private class DokkaDescriptorVisitor(
dri = DRI.from(this),
name = name.asString(),
type = defaultType.toBound(),
- underlyingType = PlatformDependent.from(platformData, underlyingType.toBound()),
- visibility = if (isExpect) PlatformDependent.expectFrom(visibility.toDokkaVisibility())
- else PlatformDependent.from(platformData, visibility.toDokkaVisibility()),
- documentation = resolveDescriptorData(platformData),
- platformData = listOf(platformData)
+ expectPresentInSet = null,
+ underlyingType = underlyingType.toBound().toSourceSetDependent(),
+ visibility = visibility.toDokkaVisibility().toSourceSetDependent(),
+ documentation = resolveDescriptorData(),
+ sourceSets = listOf(sourceSet)
)
}
@@ -458,8 +447,9 @@ private class DokkaDescriptorVisitor(
dri = parent.dri.copy(target = index + 1),
name = descriptor.name.asString(),
type = descriptor.type.toBound(),
- documentation = descriptor.resolveDescriptorData(platformData),
- platformData = listOf(platformData),
+ expectPresentInSet = null,
+ documentation = descriptor.resolveDescriptorData(),
+ sourceSets = listOf(sourceSet),
extra = PropertyContainer.withAll(
listOfNotNull(
descriptor.additionalExtras(),
@@ -468,18 +458,23 @@ private class DokkaDescriptorVisitor(
)
)
- private fun MemberScope.functions(parent: DRIWithPlatformInfo): List<DFunction> =
- getContributedDescriptors(DescriptorKindFilter.FUNCTIONS) { true }
+ private fun MemberScope.getContributedDescriptors(kindFilter: DescriptorKindFilter, shouldFilter: Boolean) =
+ getContributedDescriptors(kindFilter) { true }.let {
+ if (shouldFilter) it.filterDescriptorsInSourceSet() else it
+ }
+
+ private fun MemberScope.functions(parent: DRIWithPlatformInfo, packageLevel: Boolean = false): List<DFunction> =
+ getContributedDescriptors(DescriptorKindFilter.FUNCTIONS, packageLevel)
.filterIsInstance<FunctionDescriptor>()
.map { visitFunctionDescriptor(it, parent) }
- private fun MemberScope.properties(parent: DRIWithPlatformInfo): List<DProperty> =
- getContributedDescriptors(DescriptorKindFilter.VALUES) { true }
+ private fun MemberScope.properties(parent: DRIWithPlatformInfo, packageLevel: Boolean = false): List<DProperty> =
+ getContributedDescriptors(DescriptorKindFilter.VALUES, packageLevel)
.filterIsInstance<PropertyDescriptor>()
.map { visitPropertyDescriptor(it, parent) }
- private fun MemberScope.classlikes(parent: DRIWithPlatformInfo): List<DClasslike> =
- getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) { true }
+ private fun MemberScope.classlikes(parent: DRIWithPlatformInfo, packageLevel: Boolean = false): List<DClasslike> =
+ getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, packageLevel)
.filter { it is ClassDescriptor && it.kind != ClassKind.ENUM_ENTRY }
.map { visitClassDescriptor(it as ClassDescriptor, parent) }
.mapNotNull { it as? DClasslike }
@@ -489,8 +484,8 @@ private class DokkaDescriptorVisitor(
.filterIsInstance<PackageFragmentDescriptor>()
.map { visitPackageFragmentDescriptor(it, parent) }
- private fun MemberScope.typealiases(parent: DRIWithPlatformInfo): List<DTypeAlias> =
- getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES) { true }
+ private fun MemberScope.typealiases(parent: DRIWithPlatformInfo, packageLevel: Boolean = false): List<DTypeAlias> =
+ getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES, packageLevel)
.filterIsInstance<TypeAliasDescriptor>()
.map { visitTypeAliasDescriptor(it, parent) }
@@ -500,19 +495,14 @@ private class DokkaDescriptorVisitor(
.filter { it.kind == ClassKind.ENUM_ENTRY }
.map { enumEntryDescriptor(it, parent) }
- private fun DeclarationDescriptor.resolveDescriptorData(platformData: PlatformData?): PlatformDependent<DocumentationNode> = getDocumentation().let {
- if (it.children.isEmpty())
- PlatformDependent.empty()
- else if (platformData != null)
- PlatformDependent.from(platformData, it)
- else
- PlatformDependent.expectFrom(it)
- }
- private fun ClassDescriptor.resolveClassDescriptionData(platformData: PlatformData?): ClassInfo {
+ private fun DeclarationDescriptor.resolveDescriptorData(): SourceSetDependent<DocumentationNode> =
+ getDocumentation()?.toSourceSetDependent() ?: emptyMap()
+
+ private fun ClassDescriptor.resolveClassDescriptionData(): ClassInfo {
return ClassInfo(
(getSuperInterfaces() + getAllSuperclassesWithoutAny()).map { DRI.from(it) },
- resolveDescriptorData(platformData)
+ resolveDescriptorData()
)
}
@@ -520,9 +510,10 @@ private class DokkaDescriptorVisitor(
DTypeParameter(
DRI.from(this),
name.identifier,
- PlatformDependent.from(platformData, getDocumentation()),
+ resolveDescriptorData(),
+ null,
upperBounds.map { it.toBound() },
- listOf(platformData),
+ listOf(sourceSet),
extra = PropertyContainer.withAll(additionalExtras())
)
@@ -555,7 +546,7 @@ private class DokkaDescriptorVisitor(
private fun DeclarationDescriptor.getDocumentation() = findKDoc().let {
MarkdownParser(resolutionFacade, this, logger).parseFromKDocTag(it)
- }
+ }.takeIf { it.children.isNotEmpty() }
private fun ClassDescriptor.companion(dri: DRIWithPlatformInfo): DObject? = companionObjectDescriptor?.let {
objectDescriptor(it, dri)
@@ -569,11 +560,8 @@ private class DokkaDescriptorVisitor(
else -> KotlinModifier.Empty
}
- private fun MemberDescriptor.createSources(): PlatformDependent<DocumentableSource> = if (isExpect()) {
- PlatformDependent(emptyMap(), DescriptorDocumentableSource(this))
- } else {
- PlatformDependent(mapOf(platformData to DescriptorDocumentableSource(this)))
- }
+ private fun MemberDescriptor.createSources(): SourceSetDependent<DocumentableSource> =
+ DescriptorDocumentableSource(this).toSourceSetDependent()
private fun FunctionDescriptor.additionalExtras() = listOfNotNull(
ExtraModifiers.DYNAMIC.takeIf { isDynamic() },
@@ -634,7 +622,7 @@ private class DokkaDescriptorVisitor(
private fun ValueParameterDescriptor.getDefaultValue(): String? =
(source as? KotlinSourceElement)?.psi?.children?.find { it is KtExpression }?.text
- private data class ClassInfo(val supertypes: List<DRI>, val docs: PlatformDependent<DocumentationNode>)
+ private data class ClassInfo(val supertypes: List<DRI>, val docs: SourceSetDependent<DocumentationNode>)
private fun Visibility.toDokkaVisibility(): org.jetbrains.dokka.model.Visibility = when (this) {
Visibilities.PUBLIC -> KotlinVisibility.Public