aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Rocher <bishiboosh@gmail.com>2020-12-03 10:33:23 +0100
committerGitHub <noreply@github.com>2020-12-03 10:33:23 +0100
commit207a66a54f65fc2bd40baff4b144e0df6bb2eb15 (patch)
tree861ba7da33f0aa02902c071368688ab65b221669
parent254f319aadf9327261da7c623fb22a632ce9bab8 (diff)
downloaddokka-207a66a54f65fc2bd40baff4b144e0df6bb2eb15.tar.gz
dokka-207a66a54f65fc2bd40baff4b144e0df6bb2eb15.tar.bz2
dokka-207a66a54f65fc2bd40baff4b144e0df6bb2eb15.zip
exclude top-level const val from getter generation and show them as public and static (#1636)
-rw-r--r--plugins/javadoc/src/test/kotlin/org/jetbrains/dokka/javadoc/JavadocClasslikeTemplateMapTest.kt27
-rw-r--r--plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt21
-rw-r--r--plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt32
3 files changed, 77 insertions, 3 deletions
diff --git a/plugins/javadoc/src/test/kotlin/org/jetbrains/dokka/javadoc/JavadocClasslikeTemplateMapTest.kt b/plugins/javadoc/src/test/kotlin/org/jetbrains/dokka/javadoc/JavadocClasslikeTemplateMapTest.kt
index f03b10b4..2fb1ae0e 100644
--- a/plugins/javadoc/src/test/kotlin/org/jetbrains/dokka/javadoc/JavadocClasslikeTemplateMapTest.kt
+++ b/plugins/javadoc/src/test/kotlin/org/jetbrains/dokka/javadoc/JavadocClasslikeTemplateMapTest.kt
@@ -316,6 +316,33 @@ internal class JavadocClasslikeTemplateMapTest : AbstractJavadocTemplateMapTest(
}
}
+ @Test
+ fun `class with top-level const`() {
+ dualTestTemplateMapInline(
+ kotlin =
+ """
+ /src/Test.kt
+ package com.test.package0
+
+ const val TEST_VAL = "test"
+ """,
+ java =
+ """
+ /src/com/test/package0/TestKt.java
+ package com.test.package0;
+
+ public final class TestKt {
+ public static final String TEST_VAL = "test";
+ }
+ """
+ ) {
+ val map = singlePageOfType<JavadocClasslikePageNode>().templateMap
+ val properties = assertIsInstance<List<*>>(map["properties"])
+ val property = assertIsInstance<Map<String, Any?>>(properties.first())
+ assertEquals("public final static <a href=https://docs.oracle.com/javase/8/docs/api/java/lang/String.html>String</a> <a href=TestKt.html#TEST_VAL>TEST_VAL</a>", "${property["modifiers"]} ${property["signature"]}")
+ }
+ }
+
private fun assertParameterNode(node: Map<String, Any?>, expectedName: String, expectedType: String, expectedDescription: String){
assertEquals(expectedName, node["name"])
assertEquals(expectedType, node["type"])
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 5112ae0b..0f7d5c7a 100644
--- a/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt
+++ b/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt
@@ -23,6 +23,13 @@ private fun <T : WithSources> List<T>.groupedByLocation() =
} // TODO: first() does not look reasonable
}) { it.second }
+private val DProperty.isConst: Boolean
+ get() = extra[AdditionalModifiers]
+ ?.content
+ ?.any { (_, modifiers) ->
+ ExtraModifiers.KotlinOnlyModifiers.Const in modifiers
+ } == true
+
internal fun DPackage.asJava(): DPackage {
@Suppress("UNCHECKED_CAST")
val syntheticClasses = ((properties + functions) as List<WithSources>)
@@ -31,10 +38,12 @@ internal fun DPackage.asJava(): DPackage {
DClass(
dri = dri.withClass(syntheticClassName),
name = syntheticClassName,
- properties = nodes.filterIsInstance<DProperty>().map { it.asJava() },
+ properties = nodes.filterIsInstance<DProperty>().map { it.asJava(true) },
constructors = emptyList(),
functions = (
- nodes.filterIsInstance<DProperty>()
+ nodes
+ .filterIsInstance<DProperty>()
+ .filterNot { it.isConst }
.flatMap { it.javaAccessors() } +
nodes.filterIsInstance<DFunction>()
.map { it.asJava(syntheticClassName) }), // TODO: methods are static and receiver is a param
@@ -71,7 +80,13 @@ internal fun DProperty.asJava(isTopLevel: Boolean = false, relocateToClass: Stri
dri.withClass(relocateToClass)
},
modifier = javaModifierFromSetter(),
- visibility = visibility.mapValues { it.value.propertyVisibilityAsJava() },
+ visibility = visibility.mapValues {
+ if (isTopLevel && isConst) {
+ JavaVisibility.Public
+ } else {
+ it.value.propertyVisibilityAsJava()
+ }
+ },
type = type.asJava(), // TODO: check
setter = null,
getter = null, // Removing getters and setters as they will be available as functions
diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
index 7def1111..5430ea88 100644
--- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
+++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt
@@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test
import matchers.content.*
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.jdk
+import org.junit.Assert
import signatures.renderedContent
import signatures.signature
import utils.A
@@ -372,6 +373,37 @@ class KotlinAsJavaPluginTest : BaseAbstractTest() {
}
}
}
+
+ @Test
+ fun `const in top level`() {
+ val writerPlugin = TestOutputWriterPlugin()
+ val configuration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ sourceRoots = listOf("src/")
+ externalDocumentationLinks = listOf(
+ DokkaConfiguration.ExternalDocumentationLink.jdk(8),
+ stdlibExternalDocumentationLink
+ )
+ }
+ }
+ }
+ testInline(
+ """
+ |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
+ |package kotlinAsJavaPlugin
+ |
+ |const val FIRST = "String"
+ """.trimMargin(),
+ configuration,
+ pluginOverrides = listOf(writerPlugin),
+ cleanupOutput = true
+ ) {
+ renderingStage = { _, _ ->
+ Assert.assertNull(writerPlugin.writer.contents["root/kotlinAsJavaPlugin/-test-kt/get-f-i-r-s-t.html"])
+ }
+ }
+ }
}
private val ContentNode.mainContents: List<ContentNode>