aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-11-23 19:50:49 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-11-23 19:50:49 +0300
commitb0310f8f3e242ffc64c56e8fd95710b25b37dfff (patch)
treead985b6fdc7161ef4ef0fa39789a1f11acd904a6
parentb9fa0e0741bfdfa76c3929e5343a2b19d96fc1ff (diff)
downloaddokka-b0310f8f3e242ffc64c56e8fd95710b25b37dfff.tar.gz
dokka-b0310f8f3e242ffc64c56e8fd95710b25b37dfff.tar.bz2
dokka-b0310f8f3e242ffc64c56e8fd95710b25b37dfff.zip
Fix constant values for Java
-rw-r--r--core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt4
-rw-r--r--core/src/main/kotlin/Kotlin/DocumentationBuilder.kt19
-rw-r--r--core/src/test/kotlin/model/KotlinAsJavaTest.kt20
-rw-r--r--core/testdata/java/constants.java5
4 files changed, 32 insertions, 16 deletions
diff --git a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
index 332afffb..f0b3a56b 100644
--- a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
+++ b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
@@ -220,11 +220,11 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder {
private fun DocumentationNode.appendConstantValueIfAny(field: PsiField) {
val modifierList = field.modifierList ?: return
val initializer = field.initializer ?: return
- if (field.type is PsiPrimitiveType &&
- modifierList.hasExplicitModifier(PsiModifier.FINAL) &&
+ if (modifierList.hasExplicitModifier(PsiModifier.FINAL) &&
modifierList.hasExplicitModifier(PsiModifier.STATIC)) {
val value = JavaConstantExpressionEvaluator.computeConstantExpression(initializer, false)
val text = when(value) {
+ null -> return // No value found
is String ->
"\"" + StringUtil.escapeStringCharacters(value) + "\""
else -> value.toString()
diff --git a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
index f1b8e3d3..e15006cd 100644
--- a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
+++ b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
@@ -2,7 +2,6 @@ package org.jetbrains.dokka
import com.google.inject.Inject
import com.intellij.openapi.util.text.StringUtil
-import com.intellij.psi.PsiField
import com.intellij.psi.PsiJavaFile
import org.jetbrains.dokka.DokkaConfiguration.*
import org.jetbrains.dokka.Kotlin.DescriptorDocumentationParser
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.KtParameter
-import org.jetbrains.kotlin.psi.KtVariableDeclaration
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.constants.ConstantValue
import org.jetbrains.kotlin.resolve.descriptorUtil.*
@@ -792,13 +790,7 @@ class DocumentationBuilder
}
if (isConst) {
- val psi = sourcePsi()
- val valueText = when (psi) {
- is KtVariableDeclaration -> psi.initializer?.text
- is PsiField -> psi.initializer?.text
- else -> null
- }
- valueText?.let { node.appendTextNode(it, NodeKind.Value) }
+ this.compileTimeInitializer?.toDocumentationNode()?.let { node.append(it, RefKind.Detail) }
}
@@ -922,8 +914,8 @@ class DocumentationBuilder
return node
}
- fun ConstantValue<*>.toDocumentationNode(): DocumentationNode? = value?.let { value ->
- when (value) {
+ fun ConstantValue<*>.toDocumentationNode(): DocumentationNode? = value.let { value ->
+ val text = when (value) {
is String ->
"\"" + StringUtil.escapeStringCharacters(value) + "\""
is EnumEntrySyntheticClassDescriptor ->
@@ -936,10 +928,9 @@ class DocumentationBuilder
value.toString()
}
}
- else -> value.toString()
- }.let { valueString ->
- DocumentationNode(valueString, Content.Empty, NodeKind.Value)
+ else -> "$value"
}
+ DocumentationNode(text, Content.Empty, NodeKind.Value)
}
diff --git a/core/src/test/kotlin/model/KotlinAsJavaTest.kt b/core/src/test/kotlin/model/KotlinAsJavaTest.kt
index d24d8bdd..22818038 100644
--- a/core/src/test/kotlin/model/KotlinAsJavaTest.kt
+++ b/core/src/test/kotlin/model/KotlinAsJavaTest.kt
@@ -2,6 +2,8 @@ package org.jetbrains.dokka.tests
import org.jetbrains.dokka.DocumentationModule
import org.jetbrains.dokka.NodeKind
+import org.jetbrains.dokka.RefKind
+import org.junit.Assert
import org.junit.Test
import org.junit.Assert.assertEquals
@@ -27,6 +29,24 @@ class KotlinAsJavaTest {
assertEquals("doc", getter.content.summary.toTestString())
}
}
+
+
+ @Test fun constants() {
+ verifyModelAsJava("testdata/java/constants.java") { cls ->
+ selectNodes(cls) {
+ subgraphOf(RefKind.Member)
+ matching { it.name == "constStr" || it.name == "refConst" }
+ }.forEach {
+ assertEquals("In $it", "\"some value\"", it.detailOrNull(NodeKind.Value)?.name)
+ }
+ val nullConstNode = selectNodes(cls) {
+ subgraphOf(RefKind.Member)
+ withName("nullConst")
+ }.single()
+
+ Assert.assertNull(nullConstNode.detailOrNull(NodeKind.Value))
+ }
+ }
}
fun verifyModelAsJava(source: String,
diff --git a/core/testdata/java/constants.java b/core/testdata/java/constants.java
new file mode 100644
index 00000000..26f16639
--- /dev/null
+++ b/core/testdata/java/constants.java
@@ -0,0 +1,5 @@
+public class Constants {
+ public static final String constStr = "some value";
+ public static final Object nullConst = null;
+ public static final String refConst = constStr;
+} \ No newline at end of file