diff options
author | Aurimas Liutikas <aurimas@google.com> | 2020-02-04 14:05:51 -0800 |
---|---|---|
committer | Aurimas Liutikas <aurimas@google.com> | 2020-02-05 11:40:48 -0800 |
commit | d79f3599e848759d172e5b15142e0aabdc6e9a57 (patch) | |
tree | 6039ff5b19de3b7d7ac2eea71eb895f0a991b5a9 /core | |
parent | 459ec7288a872f7d927fd24cad5dbf33a93e10ac (diff) | |
download | dokka-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')
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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></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"><</span><span class="identifier">java.lang.String</span><span class="symbol">></span><span class="symbol">:</span> A list that is full of joy.</td> </tr> </tbody> </table> |