diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 42ae1c27d5..ba4b41313b 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -387,13 +387,14 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog ) { return when (p) { is TypeParameter -> { + if (p.presentableName != null) { + text(p.presentableName!!) + operator(": ") + } annotationsInline(p) link(p.name, p.dri) } - is FunctionalTypeConstructor -> { - annotationsInline(p) - +funType(mainDRI.single(), mainSourcesetData, p) - } + is FunctionalTypeConstructor -> +funType(mainDRI.single(), mainSourcesetData, p) is GenericTypeConstructor -> group(styles = emptySet()) { val linkText = if (showFullyQualifiedName && p.dri.packageName != null) { @@ -443,6 +444,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog text(type.presentableName!!) operator(": ") } + annotationsInline(type) if (type.isSuspendable) keyword("suspend ") if (type.isExtensionFunction) { diff --git a/plugins/base/src/test/kotlin/signatures/FunctionalTypeConstructorsSignatureTest.kt b/plugins/base/src/test/kotlin/signatures/FunctionalTypeConstructorsSignatureTest.kt index cd55a001a4..1e0a540443 100644 --- a/plugins/base/src/test/kotlin/signatures/FunctionalTypeConstructorsSignatureTest.kt +++ b/plugins/base/src/test/kotlin/signatures/FunctionalTypeConstructorsSignatureTest.kt @@ -108,6 +108,31 @@ class FunctionalTypeConstructorsSignatureTest : BaseAbstractTest() { } } + @Test + fun `kotlin syntactic sugar function with param name of generic and functional type`() { + val source = source(""" + | @Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE) + | @MustBeDocumented + | annotation class Fancy + | + | fun f(): (param1: T, param2: @Fancy ()->Unit) -> String " + """.trimIndent()) + val writerPlugin = TestOutputWriterPlugin() + + testInline( + source, configuration, pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + writerPlugin.writer.renderedContent("root/example/index.html").lastSignature().match( + "fun <", A("T"), "> ", + A("f"), "(): (param1:", A("T"), + ", param2: ", Span("@", A("Fancy")), " () -> ", A("Unit"), + ") -> ", A("String"), Span(), + ignoreSpanWithTokenStyle = true + ) + } + } + } @Disabled // Add coroutines on classpath and get proper import @Test fun `kotlin normal suspendable function`() {