diff options
author | Dmitry Jemerov <yole@jetbrains.com> | 2015-02-20 17:12:57 +0100 |
---|---|---|
committer | Dmitry Jemerov <yole@jetbrains.com> | 2015-02-20 17:12:57 +0100 |
commit | 6620764c5f18c87933369131602b24bd2fa490e8 (patch) | |
tree | dd7045487ac5fabe78574a4b41eb49cc2e58f395 /src | |
parent | bfe53b9ea3359baee1785c2f6291bb5408597e28 (diff) | |
download | dokka-6620764c5f18c87933369131602b24bd2fa490e8.tar.gz dokka-6620764c5f18c87933369131602b24bd2fa490e8.tar.bz2 dokka-6620764c5f18c87933369131602b24bd2fa490e8.zip |
pending references logic moved from DocumentationBuilder to model
Diffstat (limited to 'src')
-rw-r--r-- | src/Kotlin/DocumentationBuilder.kt | 36 | ||||
-rw-r--r-- | src/Model/DocumentationReference.kt | 13 | ||||
-rw-r--r-- | src/main.kt | 6 |
3 files changed, 27 insertions, 28 deletions
diff --git a/src/Kotlin/DocumentationBuilder.kt b/src/Kotlin/DocumentationBuilder.kt index 5d9857a7..dae1c4ea 100644 --- a/src/Kotlin/DocumentationBuilder.kt +++ b/src/Kotlin/DocumentationBuilder.kt @@ -33,14 +33,12 @@ private fun isSamePackage(descriptor1: DeclarationDescriptor, descriptor2: Decla return package1 != null && package2 != null && package1.fqName == package2.fqName } -class PendingLink(val lazyNodeFrom: () -> DocumentationNode?, - val lazyNodeTo: () -> DocumentationNode?, - val kind: DocumentationReference.Kind) - -class DocumentationBuilder(val session: ResolveSession, val options: DocumentationOptions, val logger: DokkaLogger) { +class DocumentationBuilder(val session: ResolveSession, + val options: DocumentationOptions, + val pendingReferences: MutableList<PendingDocumentationReference>, + val logger: DokkaLogger) { val visibleToDocumentation = setOf(Visibilities.INTERNAL, Visibilities.PROTECTED, Visibilities.PUBLIC) val descriptorToNode = hashMapOf<DeclarationDescriptor, DocumentationNode>() - val links = arrayListOf<PendingLink>() fun parseDocumentation(descriptor: DeclarationDescriptor): Content { val kdoc = KDocFinder.findKDoc(descriptor) @@ -104,12 +102,18 @@ class DocumentationBuilder(val session: ResolveSession, val options: Documentati } fun link(node: DocumentationNode, descriptor: DeclarationDescriptor) { - links.add(PendingLink({() -> node}, {() -> descriptorToNode[descriptor]}, DocumentationReference.Kind.Link)) + pendingReferences.add(PendingDocumentationReference( + {() -> node}, + {() -> descriptorToNode[descriptor]}, + DocumentationReference.Kind.Link)) } fun link(fromDescriptor: DeclarationDescriptor?, toDescriptor: DeclarationDescriptor?, kind: DocumentationReference.Kind) { if (fromDescriptor != null && toDescriptor != null) { - links.add(PendingLink({() -> descriptorToNode[fromDescriptor]}, {() -> descriptorToNode[toDescriptor]}, kind)) + pendingReferences.add(PendingDocumentationReference( + {() -> descriptorToNode[fromDescriptor]}, + {() -> descriptorToNode[toDescriptor]}, + kind)) } } @@ -489,20 +493,4 @@ class DocumentationBuilder(val session: ResolveSession, val options: Documentati } return if (valueString != null) DocumentationNode(valueString, Content.Empty, DocumentationNode.Kind.Value) else null } - - /** - * Generates cross-references for documentation such as extensions for a type, inheritors, etc - * - * $receiver: [DocumentationContext] for node/descriptor resolutions - * $node: [DocumentationNode] to visit - */ - public fun resolveReferences() { - for (link in links) { - val fromNode = link.lazyNodeFrom() - val toNode = link.lazyNodeTo() - if (fromNode != null && toNode != null) { - fromNode.addReferenceTo(toNode, link.kind) - } - } - } } diff --git a/src/Model/DocumentationReference.kt b/src/Model/DocumentationReference.kt index d7ad5f9e..4bc819f6 100644 --- a/src/Model/DocumentationReference.kt +++ b/src/Model/DocumentationReference.kt @@ -15,5 +15,14 @@ public data class DocumentationReference(val from: DocumentationNode, val to: Do } } - - +class PendingDocumentationReference(val lazyNodeFrom: () -> DocumentationNode?, + val lazyNodeTo: () -> DocumentationNode?, + val kind: DocumentationReference.Kind) { + fun resolve() { + val fromNode = lazyNodeFrom() + val toNode = lazyNodeTo() + if (fromNode != null && toNode != null) { + fromNode.addReferenceTo(toNode, kind) + } + } +} diff --git a/src/main.kt b/src/main.kt index 44c435d2..535eee5c 100644 --- a/src/main.kt +++ b/src/main.kt @@ -195,7 +195,8 @@ fun buildDocumentationModule(environment: AnalysisEnvironment, val fragments = fragmentFiles.map { session.getPackageFragment(it.getPackageFqName()) }.filterNotNull().distinct() val moduleContent = Content() - val documentationBuilder = DocumentationBuilder(session, options, logger) + val pendingReferences = arrayListOf<PendingDocumentationReference>() + val documentationBuilder = DocumentationBuilder(session, options, pendingReferences, logger) for (include in includes) { val file = File(include) if (file.exists()) { @@ -211,13 +212,14 @@ fun buildDocumentationModule(environment: AnalysisEnvironment, with(documentationBuilder) { documentationModule.appendFragments(fragments) - documentationBuilder.resolveReferences() } val javaFiles = environment.getJavaSourceFiles().filter(filesToDocumentFilter) val javaDocumentationBuilder = JavaDocumentationBuilder(options) javaFiles.map { javaDocumentationBuilder.appendFile(it, documentationModule) } + pendingReferences.forEach { it.resolve() } + documentationModule } |