aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-04-27 19:42:25 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-07-14 23:57:11 +0300
commit6cfaf04a6a0a34299d3a39803322b2eea2afbaac (patch)
treecadfe1175307772d25411aa77fefd42dc3c7caa6 /core/src/main/kotlin
parent57a6bb55ddafbde4eab7c1c4344fff3ad3f0fe1f (diff)
downloaddokka-6cfaf04a6a0a34299d3a39803322b2eea2afbaac.tar.gz
dokka-6cfaf04a6a0a34299d3a39803322b2eea2afbaac.tar.bz2
dokka-6cfaf04a6a0a34299d3a39803322b2eea2afbaac.zip
[backport] KT-24149: Fix resolution of links in Javadoc
Original: edc0581
Diffstat (limited to 'core/src/main/kotlin')
-rw-r--r--core/src/main/kotlin/Java/JavadocParser.kt17
1 files changed, 14 insertions, 3 deletions
diff --git a/core/src/main/kotlin/Java/JavadocParser.kt b/core/src/main/kotlin/Java/JavadocParser.kt
index 08ae5354..0869081b 100644
--- a/core/src/main/kotlin/Java/JavadocParser.kt
+++ b/core/src/main/kotlin/Java/JavadocParser.kt
@@ -1,10 +1,12 @@
package org.jetbrains.dokka
import com.intellij.psi.*
+import com.intellij.psi.impl.source.tree.JavaDocElementType
import com.intellij.psi.javadoc.PsiDocTag
import com.intellij.psi.javadoc.PsiDocTagValue
import com.intellij.psi.javadoc.PsiDocToken
import com.intellij.psi.javadoc.PsiInlineDocTag
+import com.intellij.psi.util.PsiTreeUtil
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.nodes.Node
@@ -130,11 +132,11 @@ class JavadocParser(
private fun MutableContent.convertSeeTag(tag: PsiDocTag) {
val linkElement = tag.linkElement() ?: return
val seeSection = findSectionByTag(ContentTags.SeeAlso) ?: addSection(ContentTags.SeeAlso, null)
- val linkSignature = resolveLink(linkElement)
+ val linkSignature = resolveLink(tag.referenceElement())
val text = ContentText(linkElement.text)
if (linkSignature != null) {
val linkNode =
- ContentNodeLazyLink(tag.valueElement!!.text, { -> refGraph.lookupOrWarn(linkSignature, logger) })
+ ContentNodeLazyLink((tag.valueElement ?: linkElement).text, { -> refGraph.lookupOrWarn(linkSignature, logger) })
linkNode.append(text)
seeSection.append(linkNode)
} else {
@@ -144,7 +146,7 @@ class JavadocParser(
private fun convertInlineDocTag(tag: PsiInlineDocTag) = when (tag.name) {
"link", "linkplain" -> {
- val valueElement = tag.linkElement()
+ val valueElement = tag.referenceElement()
val linkSignature = resolveLink(valueElement)
if (linkSignature != null) {
val labelText = tag.dataElements.firstOrNull { it is PsiDocToken }?.text ?: valueElement!!.text
@@ -165,6 +167,15 @@ class JavadocParser(
else -> tag.text
}
+ private fun PsiDocTag.referenceElement(): PsiElement? =
+ linkElement()?.let {
+ if (it.node.elementType == JavaDocElementType.DOC_REFERENCE_HOLDER) {
+ PsiTreeUtil.findChildOfType(it, PsiJavaCodeReferenceElement::class.java)
+ } else {
+ it
+ }
+ }
+
private fun PsiDocTag.linkElement(): PsiElement? =
valueElement ?: dataElements.firstOrNull { it !is PsiWhiteSpace }