aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin
diff options
context:
space:
mode:
authorAurimas Liutikas <aurimas@google.com>2020-02-04 14:05:51 -0800
committerAurimas Liutikas <aurimas@google.com>2020-02-05 11:40:48 -0800
commitd79f3599e848759d172e5b15142e0aabdc6e9a57 (patch)
tree6039ff5b19de3b7d7ac2eea71eb895f0a991b5a9 /core/src/main/kotlin
parent459ec7288a872f7d927fd24cad5dbf33a93e10ac (diff)
downloaddokka-d79f3599e848759d172e5b15142e0aabdc6e9a57.tar.gz
Attempt to resolve external links for types in as-java.
Bug: 136558221 Test: existing tests got updated Change-Id: I0ca983b5ad7d2d3a018efb3bc269a7946f638bb9
Diffstat (limited to 'core/src/main/kotlin')
-rw-r--r--core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt26
-rw-r--r--core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt4
-rw-r--r--core/src/main/kotlin/Kotlin/KotlinLanguageService.kt2
-rw-r--r--core/src/main/kotlin/javadoc/docbase.kt4
4 files changed, 31 insertions, 5 deletions
diff --git a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
index 846497930..cc9c2c2bf 100644
--- a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
+++ b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
@@ -4,6 +4,7 @@ import com.google.inject.Inject
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.*
import com.intellij.psi.impl.JavaConstantExpressionEvaluator
+import com.intellij.psi.impl.source.PsiClassReferenceType
import com.intellij.psi.util.InheritanceUtil
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
@@ -47,6 +48,7 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder {
private val options: DocumentationOptions
private val refGraph: NodeReferenceGraph
private val docParser: JavaDocumentationParser
+ private val externalDocumentationLinkResolver: ExternalDocumentationLinkResolver
@Inject constructor(
options: DocumentationOptions,
@@ -58,12 +60,19 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder {
this.options = options
this.refGraph = refGraph
this.docParser = JavadocParser(refGraph, logger, signatureProvider, externalDocumentationLinkResolver)
+ this.externalDocumentationLinkResolver = externalDocumentationLinkResolver
}
- constructor(options: DocumentationOptions, refGraph: NodeReferenceGraph, docParser: JavaDocumentationParser) {
+ constructor(
+ options: DocumentationOptions,
+ refGraph: NodeReferenceGraph,
+ docParser: JavaDocumentationParser,
+ externalDocumentationLinkResolver: ExternalDocumentationLinkResolver
+ ) {
this.options = options
this.refGraph = refGraph
this.docParser = docParser
+ this.externalDocumentationLinkResolver = externalDocumentationLinkResolver
}
override fun appendFile(file: PsiJavaFile, module: DocumentationModule, packageContent: Map<String, Content>) {
@@ -309,7 +318,20 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder {
if (psiType == null) {
return
}
- append(psiType.build(kind), RefKind.Detail)
+
+ val node = psiType.build(kind)
+ append(node, RefKind.Detail)
+
+ // Attempt to create an external link if the psiType is one
+ if (psiType is PsiClassReferenceType) {
+ val target = psiType.reference.resolve()
+ if (target != null) {
+ val externalLink = externalDocumentationLinkResolver.buildExternalDocumentationLink(target)
+ if (externalLink != null) {
+ node.append(DocumentationNode(externalLink, Content.Empty, NodeKind.ExternalLink), RefKind.Link)
+ }
+ }
+ }
}
fun PsiType.build(kind: NodeKind = NodeKind.Type): DocumentationNode {
diff --git a/core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt b/core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt
index e1cda8754..c5fb15385 100644
--- a/core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt
+++ b/core/src/main/kotlin/Kotlin/KotlinAsJavaDocumentationBuilder.kt
@@ -30,7 +30,9 @@ class KotlinAsJavaDocumentationBuilder
val javaDocumentationBuilder = JavaPsiDocumentationBuilder(documentationBuilder.options,
documentationBuilder.refGraph,
- kotlinAsJavaDocumentationParser)
+ kotlinAsJavaDocumentationParser,
+ documentationBuilder.linkResolver.externalDocumentationLinkResolver
+ )
psiPackage.classes.filter { it is KtLightElement<*, *> }.filter { it.isVisibleInDocumentation() }.forEach {
javaDocumentationBuilder.appendClasses(packageNode, arrayOf(it))
diff --git a/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt b/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt
index 22f28da39..757221ce5 100644
--- a/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt
+++ b/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt
@@ -454,7 +454,7 @@ class KotlinLanguageService : CommonLanguageService() {
fun DocumentationNode.qualifiedNameFromType(): String {
return details.firstOrNull { it.kind == NodeKind.QualifiedName }?.name
- ?: (links.firstOrNull() ?: hiddenLinks.firstOrNull())?.qualifiedName()
+ ?: (links.firstOrNull { it.kind != NodeKind.ExternalLink } ?: hiddenLinks.firstOrNull())?.qualifiedName()
?: name
}
diff --git a/core/src/main/kotlin/javadoc/docbase.kt b/core/src/main/kotlin/javadoc/docbase.kt
index 76d63383e..12f571bee 100644
--- a/core/src/main/kotlin/javadoc/docbase.kt
+++ b/core/src/main/kotlin/javadoc/docbase.kt
@@ -185,7 +185,9 @@ open class TypeAdapter(override val module: ModuleNodeAdapter, override val node
NodeKind.Exception -> module.classNamed(qualifiedTypeName()) ?: ClassDocumentationNodeAdapter(module, node)
else -> when {
- node.links.isNotEmpty() -> TypeAdapter(module, node.links.first()).asClassDoc()
+ node.links.firstOrNull { it.kind != NodeKind.ExternalLink } != null -> {
+ TypeAdapter(module, node.links.firstOrNull { it.kind != NodeKind.ExternalLink }!!).asClassDoc()
+ }
else -> ClassDocumentationNodeAdapter(module, node) // TODO ?
}
}