aboutsummaryrefslogtreecommitdiff
path: root/core
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
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')
-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
-rw-r--r--core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html10
5 files changed, 36 insertions, 10 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 ?
}
}
diff --git a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
index 7d2b4831f..2971086a9 100644
--- a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
+++ b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
@@ -48,9 +48,9 @@
</td>
</tr>
<tr>
- <td><span class="identifier">java.util.ArrayList</span><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span></td>
+ <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span></td>
<td>
- <div><code><a href="#getMyList(java.util.HashSet)">getMyList</a>(<span class="identifier">java.util.HashSet</span> <span class="identifier">input</span>)</code></div>
+ <div><code><a href="#getMyList(java.util.HashSet)">getMyList</a>(<a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a> <span class="identifier">input</span>)</code></div>
<p></p>
</td>
</tr>
@@ -92,7 +92,7 @@
<a name="getMyList(java.util.HashSet)"></a>
<div class="api apilevel-" data-version-added="">
<h3 class="api-name">getMyList</h3>
- <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">java.util.ArrayList</span><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span> <span class="identifier">getMyList</span><span class="symbol">(</span><span class="identifier">java.util.HashSet</span> <span class="identifier">input</span><span class="symbol">)</span></pre>
+ <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span> <span class="identifier">getMyList</span><span class="symbol">(</span><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a> <span class="identifier">input</span><span class="symbol">)</span></pre>
<table class="responsive">
<tbody>
<tr>
@@ -100,7 +100,7 @@
</tr>
<tr>
<td><code>input</code></td>
- <td><span class="identifier">java.util.HashSet</span><span class="symbol">:</span> The best set you can afford.</td>
+ <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a><span class="symbol">:</span> The best set you can afford.</td>
</tr>
</tbody>
</table>
@@ -110,7 +110,7 @@
<th colspan="2">Return</th>
</tr>
<tr>
- <td colspan="2"><span class="identifier">java.util.ArrayList</span><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span><span class="symbol">:</span> A list that is full of joy.</td>
+ <td colspan="2"><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol">&lt;</span><span class="identifier">java.lang.String</span><span class="symbol">&gt;</span><span class="symbol">:</span> A list that is full of joy.</td>
</tr>
</tbody>
</table>