Skip to content

Commit

Permalink
Fixing clashing properties and functions pages
Browse files Browse the repository at this point in the history
  • Loading branch information
sellophane committed Oct 1, 2020
1 parent 709fdce commit ce8672e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -53,24 +53,30 @@ 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())
else -> null
} as? T?
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": (", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -61,7 +61,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": (", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -79,7 +79,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": ", A("Boolean"), ".(", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -97,7 +97,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": (param: ", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -116,7 +116,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": suspend (", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -134,7 +134,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": suspend (", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -152,7 +152,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": suspend ", A("Boolean"), ".(", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -170,7 +170,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ", A("nF"), ": suspend (param: ", A("Int"), ") -> ", A("String"), Span()
)
}
Expand All @@ -189,7 +189,7 @@ class FunctionalTypeConstructorsSignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"val ",
A("nF"),
": suspend (param1: suspend",
Expand Down
2 changes: 1 addition & 1 deletion plugins/base/src/test/kotlin/signatures/SignatureTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ class SignatureTest : AbstractCoreTest() {
pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
writerPlugin.writer.renderedContent("root/example.html").firstSignature().match(
writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match(
"const val ", A("simpleVal"), ": ", A("Int"), " = 1", Span()
)
}
Expand Down

0 comments on commit ce8672e

Please sign in to comment.