From 184a24c93e0939c5a9ceb10cf3c3992f11165219 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 25 Feb 2015 19:03:51 +0100 Subject: resolve references through single map from signature to DocumentationNode (enables cross-language references) --- src/Java/JavaDocumentationBuilder.kt | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'src/Java/JavaDocumentationBuilder.kt') diff --git a/src/Java/JavaDocumentationBuilder.kt b/src/Java/JavaDocumentationBuilder.kt index 55f9017b..a7016ae6 100644 --- a/src/Java/JavaDocumentationBuilder.kt +++ b/src/Java/JavaDocumentationBuilder.kt @@ -8,9 +8,7 @@ import com.intellij.psi.javadoc.PsiInlineDocTag import org.jetbrains.dokka.DocumentationNode.Kind public class JavaDocumentationBuilder(private val options: DocumentationOptions, - private val pendingReferences: MutableList) { - private val signatureToNode = hashMapOf() - + private val refGraph: NodeReferenceGraph) { fun appendFile(file: PsiJavaFile, module: DocumentationModule) { val packageNode = module.findOrCreatePackageNode(file.getPackageName()) packageNode.appendChildren(file.getClasses()) { build() } @@ -87,7 +85,7 @@ public class JavaDocumentationBuilder(private val options: DocumentationOptions, if (target != null) { val signature = getSignature(target) if (signature != null) { - return ContentNodeLazyLink(valueElement!!.getText(), {() -> signatureToNode[signature]}) + return ContentNodeLazyLink(valueElement!!.getText(), {() -> refGraph.lookup(signature)}) } } return null @@ -101,26 +99,23 @@ public class JavaDocumentationBuilder(private val options: DocumentationOptions, } fun register(element: PsiElement, node: DocumentationNode) { - signatureToNode[getSignature(element)] = node + val signature = getSignature(element) + if (signature != null) { + refGraph.register(signature, node) + } } fun link(node: DocumentationNode, element: PsiElement?) { val qualifiedName = getSignature(element) if (qualifiedName != null) { - pendingReferences.add(PendingDocumentationReference( - {() -> node}, - {() -> signatureToNode[qualifiedName]}, - DocumentationReference.Kind.Link)) + refGraph.link(node, qualifiedName, DocumentationReference.Kind.Link) } } fun link(element: PsiElement?, node: DocumentationNode, kind: DocumentationReference.Kind) { val qualifiedName = getSignature(element) if (qualifiedName != null) { - pendingReferences.add(PendingDocumentationReference( - {() -> signatureToNode[qualifiedName]}, - {() -> node}, - kind)) + refGraph.link(qualifiedName, node, kind) } } -- cgit