aboutsummaryrefslogtreecommitdiff
path: root/plugins/kotlin-as-java
diff options
context:
space:
mode:
authorVadim Mishenev <vad-mishenev@yandex.ru>2022-06-08 01:15:23 +0300
committerGitHub <noreply@github.com>2022-06-08 01:15:23 +0300
commit8c2a79f39377892be44d752d0958efb9b83f1fce (patch)
tree8ee91d4fa05fa31fb82df9ac1639812ff2840d4c /plugins/kotlin-as-java
parent2e4121457a0fbae1a216007aee6c84a01be628f5 (diff)
downloaddokka-8c2a79f39377892be44d752d0958efb9b83f1fce.tar.gz
dokka-8c2a79f39377892be44d752d0958efb9b83f1fce.tar.bz2
dokka-8c2a79f39377892be44d752d0958efb9b83f1fce.zip
Support definitely non-nullable types (#2520)
* Support definitely non-nullable types [Definitely non-nullable types](https://github.com/Kotlin/KEEP/blob/c72601cf35c1e95a541bb4b230edb474a6d1d1a8/proposals/definitely-non-nullable-types.md) are enabled since Kotlin 1.7
Diffstat (limited to 'plugins/kotlin-as-java')
-rw-r--r--plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt1
-rw-r--r--plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt1
-rw-r--r--plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt59
3 files changed, 61 insertions, 0 deletions
diff --git a/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt b/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt
index 8ff35781..4a21aeae 100644
--- a/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt
+++ b/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt
@@ -305,6 +305,7 @@ private fun Bound.asJava(): Bound = when (this) {
inner = inner.asJava()
)
is Nullable -> copy(inner.asJava())
+ is DefinitelyNonNullable -> copy(inner.asJava())
is PrimitiveJavaType -> this
is Void -> this
is JavaObject -> this
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 2b56a2bf..50dbc1cb 100644
--- a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt
+++ b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt
@@ -196,6 +196,7 @@ class JavaSignatureProvider internal constructor(ctcc: CommentsToContentConverte
is Star -> operator("?")
is Nullable -> signatureForProjection(p.inner)
+ is DefinitelyNonNullable -> signatureForProjection(p.inner)
is JavaObject, is Dynamic -> link("Object", DRI("java.lang", "Object"))
is Void -> text("void")
diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt
new file mode 100644
index 00000000..5f755ff3
--- /dev/null
+++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaSignatureTest.kt
@@ -0,0 +1,59 @@
+package kotlinAsJavaPlugin
+
+import org.jetbrains.dokka.DokkaConfiguration
+import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
+import org.jetbrains.dokka.jdk
+import org.junit.jupiter.api.Test
+import signatures.firstSignature
+import signatures.renderedContent
+import utils.*
+
+class KotlinAsJavaSignatureTest : BaseAbstractTest() {
+
+ private val configuration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ sourceRoots = listOf("src/")
+ externalDocumentationLinks = listOf(
+ DokkaConfiguration.ExternalDocumentationLink.jdk(8),
+ stdlibExternalDocumentationLink
+ )
+ }
+ }
+ }
+
+ @Suppress("SameParameterValue")
+ private fun source(signature: String) =
+ """
+ |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
+ |package kotlinAsJavaPlugin
+ |
+ | $signature
+ """.trimIndent()
+
+ @Test
+ fun `fun with definitely non-nullable types as java`() {
+ val source = source("fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y")
+ val writerPlugin = TestOutputWriterPlugin()
+
+ testInline(
+ source,
+ configuration,
+ pluginOverrides = listOf(writerPlugin)
+ ) {
+ renderingStage = { _, _ ->
+ val signature = writerPlugin.writer.renderedContent("root/kotlinAsJavaPlugin/-test-kt/elvis-like.html").firstSignature()
+ signature.match(
+ "public final static ", Span("T"), A("elvisLike"),
+ "<T extends ", A("Any"), ">(",
+ Span(
+ Span(Span(), " x, "),
+ Span(Span(), " y")
+ ),
+ ")", Span(),
+ ignoreSpanWithTokenStyle = true
+ )
+ }
+ }
+ }
+} \ No newline at end of file