aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/Model
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-01-11 22:22:36 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2018-07-13 18:30:09 +0300
commitc776aaab9af80987e3c073a40f92de748dbd38ca (patch)
treee14827cc2d290c1d7bb8b0544495a31ba9328bfd /core/src/main/kotlin/Model
parentbd30fa4c84d749976568be00307297ab015d9b2e (diff)
downloaddokka-c776aaab9af80987e3c073a40f92de748dbd38ca.tar.gz
dokka-c776aaab9af80987e3c073a40f92de748dbd38ca.tar.bz2
dokka-c776aaab9af80987e3c073a40f92de748dbd38ca.zip
[backport] Support deep inheritance with external classes
Original: 9e65c3d
Diffstat (limited to 'core/src/main/kotlin/Model')
-rw-r--r--core/src/main/kotlin/Model/DocumentationNode.kt19
-rw-r--r--core/src/main/kotlin/Model/DocumentationReference.kt3
2 files changed, 19 insertions, 3 deletions
diff --git a/core/src/main/kotlin/Model/DocumentationNode.kt b/core/src/main/kotlin/Model/DocumentationNode.kt
index a145ae8d..a792460f 100644
--- a/core/src/main/kotlin/Model/DocumentationNode.kt
+++ b/core/src/main/kotlin/Model/DocumentationNode.kt
@@ -104,12 +104,27 @@ open class DocumentationNode(val name: String,
get() = references(RefKind.Deprecation).singleOrNull()?.to
val platforms: List<String>
get() = references(RefKind.Platform).map { it.to.name }
+ val externalType: DocumentationNode?
+ get() = references(RefKind.ExternalType).map { it.to }.firstOrNull()
val supertypes: List<DocumentationNode>
get() = details(NodeKind.Supertype)
- val superclass: DocumentationNode?
- get() = supertypes.firstOrNull { it.links.any { it.kind in NodeKind.classLike } }
+ val superclassType: DocumentationNode?
+ get() = when (kind) {
+ NodeKind.Supertype -> (links.firstOrNull { it.kind in NodeKind.classLike } ?: externalType)?.superclassType
+ NodeKind.Interface -> null
+ in NodeKind.classLike -> supertypes.firstOrNull {
+ it.links.any { it.kind in NodeKind.classLike } ||
+ it.externalType != null
+ }
+ else -> null
+ }
+
+ val superclassTypeSequence: Sequence<DocumentationNode>
+ get() = generateSequence(superclassType) {
+ it.superclassType
+ }
// TODO: Should we allow node mutation? Model merge will copy by ref, so references are transparent, which could nice
fun addReferenceTo(to: DocumentationNode, kind: RefKind) {
diff --git a/core/src/main/kotlin/Model/DocumentationReference.kt b/core/src/main/kotlin/Model/DocumentationReference.kt
index a968f400..b0f011be 100644
--- a/core/src/main/kotlin/Model/DocumentationReference.kt
+++ b/core/src/main/kotlin/Model/DocumentationReference.kt
@@ -18,7 +18,8 @@ enum class RefKind {
HiddenAnnotation,
Deprecation,
TopLevelPage,
- Platform
+ Platform,
+ ExternalType
}
data class DocumentationReference(val from: DocumentationNode, val to: DocumentationNode, val kind: RefKind) {