aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/translators
diff options
context:
space:
mode:
authorBłażej Kardyś <bkardys@virtuslab.com>2020-09-30 16:33:06 +0200
committerKamil Doległo <9080183+kamildoleglo@users.noreply.github.com>2020-10-06 15:41:04 +0200
commit7c4301a48af55e156538666b6e645d8d13caae9a (patch)
tree47ff8205ff4765aac3caeb5a9552db85e522bb57 /plugins/base/src/main/kotlin/translators
parentbe932e200951e5b043f2e04e18b60176ac876156 (diff)
downloaddokka-7c4301a48af55e156538666b6e645d8d13caae9a.tar.gz
dokka-7c4301a48af55e156538666b6e645d8d13caae9a.tar.bz2
dokka-7c4301a48af55e156538666b6e645d8d13caae9a.zip
Fixing clashing properties and functions pages
Diffstat (limited to 'plugins/base/src/main/kotlin/translators')
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt41
1 files changed, 24 insertions, 17 deletions
diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
index e6f92d6b..41881baf 100644
--- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
+++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
@@ -36,15 +36,15 @@ open class DefaultPageCreator(
open fun pageForPackage(p: DPackage): PackagePageNode = PackagePageNode(
p.name, contentForPackage(p), setOf(p.dri), p,
- p.classlikes.renameClashingClasslikes().map(::pageForClasslike) +
- p.functions.map(::pageForFunction) + p.properties.mapNotNull(::pageForProperty)
+ p.classlikes.renameClashingDocumentable().map(::pageForClasslike) +
+ p.functions.renameClashingDocumentable().map(::pageForFunction) + p.properties.mapNotNull(::pageForProperty)
)
open fun pageForEnumEntry(e: DEnumEntry): ClasslikePageNode =
ClasslikePageNode(
e.name, contentForEnumEntry(e), setOf(e.dri), e,
- e.classlikes.renameClashingClasslikes().map(::pageForClasslike) +
- e.filteredFunctions.map(::pageForFunction)
+ e.classlikes.renameClashingDocumentable().map(::pageForClasslike) +
+ e.filteredFunctions.renameClashingDocumentable().map(::pageForFunction)
)
open fun pageForClasslike(c: DClasslike): ClasslikePageNode {
@@ -53,24 +53,31 @@ open class DefaultPageCreator(
return ClasslikePageNode(
c.name.orEmpty(), contentForClasslike(c), setOf(c.dri), c,
constructors.map(::pageForFunction) +
- c.classlikes.renameClashingClasslikes().map(::pageForClasslike) +
- c.filteredFunctions.map(::pageForFunction) +
- c.properties.mapNotNull(::pageForProperty) +
+ c.classlikes.renameClashingDocumentable().map(::pageForClasslike) +
+ c.filteredFunctions.renameClashingDocumentable().map(::pageForFunction) +
+ c.properties.renameClashingDocumentable().mapNotNull(::pageForProperty) +
if (c is DEnum) c.entries.map(::pageForEnumEntry) else emptyList()
)
}
- private fun List<DClasslike>.renameClashingClasslikes(): List<DClasslike> = groupBy { it.dri }.values.flatMap { classlikes ->
- if (classlikes.size == 1) classlikes else classlikes.map { classlike ->
- fun ClashingDriIdentifier?.toName() = this?.value?.joinToString(", ", "(", ")") { it.displayName } ?: ""
- when(classlike) {
- is DClass -> classlike.copy(name = classlike.name + classlike.extra[ClashingDriIdentifier]?.toName())
- is DObject -> classlike.copy(name = classlike.name.orEmpty() + classlike.extra[ClashingDriIdentifier]?.toName())
- is DAnnotation -> classlike.copy(name = classlike.name + classlike.extra[ClashingDriIdentifier]?.toName())
- is DInterface -> classlike.copy(name = classlike.name + classlike.extra[ClashingDriIdentifier]?.toName())
- is DEnum -> classlike.copy(name = classlike.name + classlike.extra[ClashingDriIdentifier]?.toName())
- }
+ private fun <T> T.toClashedName() where T: Documentable, T: WithExtraProperties<T> =
+ name.orEmpty() + (extra[ClashingDriIdentifier]?.value?.joinToString(", ", "(", ")") { it.displayName } ?: "")
+
+ private fun <T> List<T>.renameClashingDocumentable(): List<T> where T: Documentable =
+ groupBy { it.dri }.values.flatMap { elements ->
+ if (elements.size == 1) elements else elements.mapNotNull { element ->
+ when(element) {
+ is DClass -> element.copy(name = element.toClashedName())
+ is DObject -> element.copy(name = element.toClashedName())
+ is DAnnotation -> element.copy(name = element.toClashedName())
+ is DInterface -> element.copy(name = element.toClashedName())
+ is DEnum -> element.copy(name = element.toClashedName())
+ is DFunction -> element.copy(name = element.toClashedName())
+ is DProperty -> element.copy(name = element.toClashedName())
+ is DTypeAlias -> element.copy(name = element.toClashedName())
+ else -> null
+ } as? T?
}
}