Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Apr 20, 2022
1 parent 13d81e6 commit be21885
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 52 deletions.
47 changes: 24 additions & 23 deletions plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt
Expand Up @@ -120,13 +120,14 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
} ?: regularSignature(c, sourceSetData)
}

private fun PageContentBuilder.DocumentableContentBuilder.defaultValueAssign(
v: DefaultValue,
sourceSet: DokkaSourceSet,
expectSourceSet: DokkaSourceSet? = null
private fun <T : Documentable> PageContentBuilder.DocumentableContentBuilder.defaultValueAssign(
d: WithExtraProperties<T>,
sourceSet: DokkaSourceSet
) {
// otherwise get a default value from an expect source set
v.expression.let { it[sourceSet] ?: it[expectSourceSet] }
// a default value of parameter can be got from expect source set
d.extra[DefaultValue]?.expression?.let {
it[sourceSet] ?: if (d is DParameter) it[d.expectPresentInSet] else null
}
?.let { expr ->
operator(" = ")
highlightValue(expr)
Expand Down Expand Up @@ -212,7 +213,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
text(param.name.orEmpty())
operator(": ")
signatureForProjection(param.type)
param.extra[DefaultValue]?.let { defaultValueAssign(it, sourceSet, c.expectPresentInSet) }
defaultValueAssign(param, sourceSet)
}
punctuation(")")
}
Expand Down Expand Up @@ -240,20 +241,20 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
(this.sources[sourceSet] as? DescriptorDocumentableSource)?.descriptor?.findPsi() is KtParameter

private fun propertySignature(p: DProperty) =
p.sourceSets.map {
p.sourceSets.map { sourceSet ->
contentBuilder.contentFor(
p,
ContentKind.Symbol,
setOf(TextStyle.Monospace) + p.stylesIfDeprecated(it),
sourceSets = setOf(it)
setOf(TextStyle.Monospace) + p.stylesIfDeprecated(sourceSet),
sourceSets = setOf(sourceSet)
) {
annotationsBlock(p)
p.visibility[it].takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
if (p.isExpectActual) keyword(if (it == p.expectPresentInSet) "expect " else "actual ")
p.modifier[it].takeIf { it !in ignoredModifiers }?.let {
p.visibility[sourceSet].takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
if (p.isExpectActual) keyword(if (sourceSet == p.expectPresentInSet) "expect " else "actual ")
p.modifier[sourceSet].takeIf { it !in ignoredModifiers }?.let {
if (it is JavaModifier.Empty) KotlinModifier.Open else it
}?.name?.let { keyword("$it ") }
p.modifiers()[it]?.toSignatureString()?.let { keyword(it) }
p.modifiers()[sourceSet]?.toSignatureString()?.let { keyword(it) }
p.setter?.let { keyword("var ") } ?: keyword("val ")
list(p.generics, prefix = "<", suffix = "> ",
separatorStyles = mainStyles + TokenStyle.Punctuation,
Expand All @@ -269,7 +270,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
operator(": ")
signatureForProjection(p.type)
// expect properties cannot have a default value
p.extra[DefaultValue]?.let { extra -> defaultValueAssign(extra, it) }
defaultValueAssign(p, sourceSet)
}
}

Expand All @@ -284,20 +285,20 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
}

private fun functionSignature(f: DFunction) =
f.sourceSets.map {
f.sourceSets.map { sourceSet ->
contentBuilder.contentFor(
f,
ContentKind.Symbol,
setOf(TextStyle.Monospace) + f.stylesIfDeprecated(it),
sourceSets = setOf(it)
setOf(TextStyle.Monospace) + f.stylesIfDeprecated(sourceSet),
sourceSets = setOf(sourceSet)
) {
annotationsBlock(f)
f.visibility[it]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
if (f.isExpectActual) keyword(if (it == f.expectPresentInSet) "expect " else "actual ")
f.modifier[it]?.takeIf { it !in ignoredModifiers }?.let {
f.visibility[sourceSet]?.takeIf { it !in ignoredVisibilities }?.name?.let { keyword("$it ") }
if (f.isExpectActual) keyword(if (sourceSet == f.expectPresentInSet) "expect " else "actual ")
f.modifier[sourceSet]?.takeIf { it !in ignoredModifiers }?.let {
if (it is JavaModifier.Empty) KotlinModifier.Open else it
}?.name?.let { keyword("$it ") }
f.modifiers()[it]?.toSignatureString()?.let { keyword(it) }
f.modifiers()[sourceSet]?.toSignatureString()?.let { keyword(it) }
keyword("fun ")
val usedGenerics = if (f.isConstructor) f.generics.filter { f uses it } else f.generics
list(usedGenerics, prefix = "<", suffix = "> ",
Expand All @@ -322,7 +323,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog
text(param.name!!)
operator(": ")
signatureForProjection(param.type)
param.extra[DefaultValue]?.let { extra -> defaultValueAssign(extra, it, f.expectPresentInSet) }
defaultValueAssign(param, sourceSet)
}
}
punctuation(")")
Expand Down
29 changes: 0 additions & 29 deletions plugins/base/src/test/kotlin/model/FunctionsTest.kt
Expand Up @@ -393,33 +393,4 @@ class FunctionTest : AbstractModelTest("/src/main/kotlin/function/Test.kt", "fun
}
}


@Test
fun functionInherited() {
inlineModelTest(
"""
|open class Foo() {
| open fun f() = ""
|}
|class Bar(): Foo() {
| override fun f() = ""
|}
"""
) {
with((this / "function").cast<DPackage>()) {
with((this / "Bar" / "f").cast<DFunction>()) {
dri.classNames equals "Foo"
name equals "f"
children counts 0

extra[InheritedMember]?.inheritedFrom?.values?.single()?.run {
classNames equals "Foo"
callable equals null
}
}


}
}
}
}

0 comments on commit be21885

Please sign in to comment.