Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Render annotations block for KaJ classes #2549

Merged
merged 2 commits into from Jun 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -67,4 +67,4 @@ private fun List<Node>.uniteConsecutiveTextNodes(): MutableList<Node> {
} else resList.add(item)
}
return resList
}
}
Expand Up @@ -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) {
Expand Down Expand Up @@ -161,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,
Expand All @@ -172,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,
Expand Down
Expand Up @@ -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() {
Expand Down Expand Up @@ -56,4 +57,77 @@ class KotlinAsJavaSignatureTest : BaseAbstractTest() {
}
}
}
}

@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
|
|@Target(AnnotationTarget.TYPE)
|@MustBeDocumented
|annotation class OnType
|
|@Target(AnnotationTarget.TYPE_PARAMETER)
|@MustBeDocumented
|annotation class OnTypeParameter
|
|@OnClass
|class Clazz<@OnTypeParameter T : @OnType Any> {
| @OnMethod
| fun <@OnTypeParameter T : @OnType Any> 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"),
// <@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"),
// <@OnTypeParameter() T extends @OnType() Object>
"<", Span("@", A("OnTypeParameter"), "() "), "T extends ", Span("@", A("OnType"), "() "), A("Any"), ">(",
Span(
Span(
Span("@", A("OnParameter"), "() "),
A("String"), "str1, "
),
Span(
A("String"), "str2"
)
), ")", Span(),
ignoreSpanWithTokenStyle = true
)
}
}
}
}