diff options
Diffstat (limited to 'src/Model')
-rw-r--r-- | src/Model/Content.kt | 6 | ||||
-rw-r--r-- | src/Model/DocumentationReference.kt | 27 |
2 files changed, 30 insertions, 3 deletions
diff --git a/src/Model/Content.kt b/src/Model/Content.kt index 01d7b206..5688e2b8 100644 --- a/src/Model/Content.kt +++ b/src/Model/Content.kt @@ -39,7 +39,7 @@ public class ContentCode() : ContentBlock() public class ContentBlockCode() : ContentBlock() public abstract class ContentNodeLink() : ContentBlock() { - abstract val node: DocumentationNode + abstract val node: DocumentationNode? } public class ContentNodeDirectLink(override val node: DocumentationNode): ContentNodeLink() { @@ -50,8 +50,8 @@ public class ContentNodeDirectLink(override val node: DocumentationNode): Conten children.hashCode() * 31 + node.name.hashCode() } -public class ContentNodeLazyLink(val linkText: String, val lazyNode: () -> DocumentationNode): ContentNodeLink() { - override val node: DocumentationNode get() = lazyNode() +public class ContentNodeLazyLink(val linkText: String, val lazyNode: () -> DocumentationNode?): ContentNodeLink() { + override val node: DocumentationNode? get() = lazyNode() override fun equals(other: Any?): Boolean = super.equals(other) && other is ContentNodeLazyLink && linkText == other.linkText diff --git a/src/Model/DocumentationReference.kt b/src/Model/DocumentationReference.kt index 4bc819f6..73d883e6 100644 --- a/src/Model/DocumentationReference.kt +++ b/src/Model/DocumentationReference.kt @@ -26,3 +26,30 @@ class PendingDocumentationReference(val lazyNodeFrom: () -> DocumentationNode?, } } } + +class NodeReferenceGraph() { + private val nodeMap = hashMapOf<String, DocumentationNode>() + val references = arrayListOf<PendingDocumentationReference>() + + fun register(signature: String, node: DocumentationNode) { + nodeMap.put(signature, node) + } + + fun link(fromNode: DocumentationNode, toSignature: String, kind: DocumentationReference.Kind) { + references.add(PendingDocumentationReference({() -> fromNode}, {() -> nodeMap[toSignature]}, kind)) + } + + fun link(fromSignature: String, toNode: DocumentationNode, kind: DocumentationReference.Kind) { + references.add(PendingDocumentationReference({() -> nodeMap[fromSignature]}, {() -> toNode}, kind)) + } + + fun link(fromSignature: String, toSignature: String, kind: DocumentationReference.Kind) { + references.add(PendingDocumentationReference({() -> nodeMap[fromSignature]}, {() -> nodeMap[toSignature]}, kind)) + } + + fun lookup(signature: String): DocumentationNode? = nodeMap[signature] + + fun resolveReferences() { + references.forEach { it.resolve() } + } +} |