From 359dea4c488fc6da9c47ddc8aa20dfada337dd09 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Tue, 21 Jun 2022 22:22:48 +0200 Subject: [PATCH 1/2] Render annotations block for KaJ classes Fixes #2527 --- .../src/main/kotlin/renderers/JsoupUtils.kt | 2 +- .../signatures/JavaSignatureProvider.kt | 1 + .../test/kotlin/KotlinAsJavaSignatureTest.kt | 62 ++++++++++++++++++- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt index 3562fb8e4a..e1ae502962 100644 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt +++ b/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt @@ -67,4 +67,4 @@ private fun List.uniteConsecutiveTextNodes(): MutableList { } else resList.add(item) } return resList - } \ No newline at end of file + } diff --git a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt index cff5b18299..2e4de3697d 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt @@ -64,6 +64,7 @@ class JavaSignatureProvider internal constructor(ctcc: CommentsToContentConverte setOf(TextStyle.Monospace) + deprecationStyles, sourceSets = setOf(sourceSet) ) { + annotationsBlock(c) c.visibility[sourceSet]?.takeIf { it !in ignoredVisibilities }?.name?.plus(" ")?.let { keyword(it) } if (c is DClass) { diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt index 5f755ff36e..71dc223481 100644 --- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt +++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt @@ -6,6 +6,7 @@ import org.jetbrains.dokka.jdk import org.junit.jupiter.api.Test import signatures.firstSignature import signatures.renderedContent +import signatures.signature import utils.* class KotlinAsJavaSignatureTest : BaseAbstractTest() { @@ -56,4 +57,63 @@ class KotlinAsJavaSignatureTest : BaseAbstractTest() { } } } -} \ No newline at end of file + + @Test + fun `should display annotations`() { + val writerPlugin = TestOutputWriterPlugin() + + testInline( + """ + |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt + |package kotlinAsJavaPlugin + | + |@MustBeDocumented + |annotation class OnClass + | + |@MustBeDocumented + |annotation class OnMethod + | + |@MustBeDocumented + |annotation class OnParameter + | + |@OnClass + |class Clazz { + | @OnMethod + | fun withParams(@OnParameter str1: String, str2: String): Boolean { + | return str1 == str2 + | } + |} + """.trimIndent(), + configuration, + pluginOverrides = listOf(writerPlugin) + ) { + renderingStage = { _, _ -> + val signatures = writerPlugin.writer + .renderedContent("root/kotlinAsJavaPlugin/-clazz/index.html") + .signature() + + val classSignature = signatures[0] + classSignature.match( + Div(Div("@", A("OnClass"), "()")), + "public final class ", A("Clazz"), Span(), + ignoreSpanWithTokenStyle = true + ) + + val functionSignature = signatures[2] + functionSignature.match( + Div(Div("@", A("OnMethod"), "()")), + "public final ", A("Boolean"), A("withParams"), "(", Span( + Span( + Span("@", A("OnParameter"), "() "), + A("String"), "str1, " + ), + Span( + A("String"), "str2" + ) + ), ")", Span(), + ignoreSpanWithTokenStyle = true + ) + } + } + } +} From 7ba5ab7cba2be49912f222333081372c24172fe2 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Wed, 22 Jun 2022 14:27:07 +0200 Subject: [PATCH 2/2] Add annotations and tests for type and type parameters --- .../signatures/JavaSignatureProvider.kt | 7 +++++- .../test/kotlin/KotlinAsJavaSignatureTest.kt | 22 +++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt index 2e4de3697d..b21745a903 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt @@ -162,6 +162,7 @@ class JavaSignatureProvider internal constructor(ctcc: CommentsToContentConverte private fun signature(t: DTypeParameter) = t.sourceSets.map { contentBuilder.contentFor(t, styles = t.stylesIfDeprecated(it), sourceSets = setOf(it)) { + annotationsInline(t) text(t.name.substringAfterLast(".")) list(t.bounds, prefix = " extends ", separatorStyles = mainStyles + TokenStyle.Punctuation, @@ -173,9 +174,13 @@ class JavaSignatureProvider internal constructor(ctcc: CommentsToContentConverte } private fun PageContentBuilder.DocumentableContentBuilder.signatureForProjection(p: Projection): Unit = when (p) { - is TypeParameter -> link(p.name, p.dri) + is TypeParameter -> { + annotationsInline(p) + link(p.name, p.dri) + } is TypeConstructor -> group(styles = emptySet()) { + annotationsInline(p) link(p.dri.classNames.orEmpty(), p.dri) list(p.projections, prefix = "<", suffix = ">", separatorStyles = mainStyles + TokenStyle.Punctuation, diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt index 71dc223481..5ce3ac41c7 100644 --- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt +++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt @@ -76,10 +76,18 @@ class KotlinAsJavaSignatureTest : BaseAbstractTest() { |@MustBeDocumented |annotation class OnParameter | + |@Target(AnnotationTarget.TYPE) + |@MustBeDocumented + |annotation class OnType + | + |@Target(AnnotationTarget.TYPE_PARAMETER) + |@MustBeDocumented + |annotation class OnTypeParameter + | |@OnClass - |class Clazz { + |class Clazz<@OnTypeParameter T : @OnType Any> { | @OnMethod - | fun withParams(@OnParameter str1: String, str2: String): Boolean { + | fun <@OnTypeParameter T : @OnType Any> withParams(@OnParameter str1: String, str2: String): Boolean { | return str1 == str2 | } |} @@ -95,14 +103,20 @@ class KotlinAsJavaSignatureTest : BaseAbstractTest() { val classSignature = signatures[0] classSignature.match( Div(Div("@", A("OnClass"), "()")), - "public final class ", A("Clazz"), Span(), + "public final class ", A("Clazz"), + // <@OnTypeParameter() T extends @OnType() Object> + "<", Span("@", A("OnTypeParameter"), "() "), "T extends ", Span("@", A("OnType"), "() "), A("Object"), ">", + Span(), ignoreSpanWithTokenStyle = true ) val functionSignature = signatures[2] functionSignature.match( Div(Div("@", A("OnMethod"), "()")), - "public final ", A("Boolean"), A("withParams"), "(", Span( + "public final ", A("Boolean"), A("withParams"), + // <@OnTypeParameter() T extends @OnType() Object> + "<", Span("@", A("OnTypeParameter"), "() "), "T extends ", Span("@", A("OnType"), "() "), A("Any"), ">(", + Span( Span( Span("@", A("OnParameter"), "() "), A("String"), "str1, "