aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Formats/StructuredFormatService.kt26
-rw-r--r--src/Kotlin/DocumentationBuilder.kt4
-rw-r--r--src/Model/DocumentationReference.kt1
-rw-r--r--test/data/format/inheritedExtensions.kt11
-rw-r--r--test/data/format/inheritedExtensions.md21
-rw-r--r--test/src/format/MarkdownFormatTest.kt6
6 files changed, 64 insertions, 5 deletions
diff --git a/src/Formats/StructuredFormatService.kt b/src/Formats/StructuredFormatService.kt
index 8bc60826..d6a167d5 100644
--- a/src/Formats/StructuredFormatService.kt
+++ b/src/Formats/StructuredFormatService.kt
@@ -337,14 +337,32 @@ public abstract class StructuredFormatService(locationService: LocationService,
DocumentationNode.Kind.EnumItem
)
}, node, to)
- appendSection(location, "Extension Properties", node.extensions.filter { it.kind == DocumentationNode.Kind.Property }, node, to)
- appendSection(location, "Extension Functions", node.extensions.filter { it.kind == DocumentationNode.Kind.Function }, node, to)
- appendSection(location, "Companion Object Extension Properties", node.extensions.filter { it.kind == DocumentationNode.Kind.CompanionObjectProperty }, node, to)
- appendSection(location, "Companion Object Extension Functions", node.extensions.filter { it.kind == DocumentationNode.Kind.CompanionObjectFunction }, node, to)
+
+ val allExtensions = collectAllExtensions(node)
+ appendSection(location, "Extension Properties", allExtensions.filter { it.kind == DocumentationNode.Kind.Property }, node, to)
+ appendSection(location, "Extension Functions", allExtensions.filter { it.kind == DocumentationNode.Kind.Function }, node, to)
+ appendSection(location, "Companion Object Extension Properties", allExtensions.filter { it.kind == DocumentationNode.Kind.CompanionObjectProperty }, node, to)
+ appendSection(location, "Companion Object Extension Functions", allExtensions.filter { it.kind == DocumentationNode.Kind.CompanionObjectFunction }, node, to)
appendSection(location, "Inheritors",
node.inheritors.filter { it.kind != DocumentationNode.Kind.EnumItem }, node, to)
appendSection(location, "Links", node.links, node, to)
}
}
+
+ private fun collectAllExtensions(node: DocumentationNode): Collection<DocumentationNode> {
+ val result = LinkedHashSet<DocumentationNode>()
+ val visited = hashSetOf<DocumentationNode>()
+
+ fun collect(node: DocumentationNode) {
+ if (!visited.add(node)) return
+ result.addAll(node.extensions)
+ node.references(DocumentationReference.Kind.Superclass).forEach { collect(it.to) }
+ }
+
+ collect(node)
+
+ return result
+
+ }
} \ No newline at end of file
diff --git a/src/Kotlin/DocumentationBuilder.kt b/src/Kotlin/DocumentationBuilder.kt
index 08a74172..2d3105ac 100644
--- a/src/Kotlin/DocumentationBuilder.kt
+++ b/src/Kotlin/DocumentationBuilder.kt
@@ -279,7 +279,9 @@ class DocumentationBuilder(val resolutionFacade: ResolutionFacade,
for (superType in superTypes) {
if (!ignoreSupertype(superType)) {
appendType(superType, DocumentationNode.Kind.Supertype)
- link(superType?.constructor?.declarationDescriptor, descriptor, DocumentationReference.Kind.Inheritor)
+ val superclass = superType?.constructor?.declarationDescriptor
+ link(superclass, descriptor, DocumentationReference.Kind.Inheritor)
+ link(descriptor, superclass, DocumentationReference.Kind.Superclass)
}
}
}
diff --git a/src/Model/DocumentationReference.kt b/src/Model/DocumentationReference.kt
index 47b9a265..79cec2f3 100644
--- a/src/Model/DocumentationReference.kt
+++ b/src/Model/DocumentationReference.kt
@@ -10,6 +10,7 @@ public data class DocumentationReference(val from: DocumentationNode, val to: Do
HiddenLink,
Extension,
Inheritor,
+ Superclass,
Override,
Annotation,
Deprecation,
diff --git a/test/data/format/inheritedExtensions.kt b/test/data/format/inheritedExtensions.kt
new file mode 100644
index 00000000..e38fe00d
--- /dev/null
+++ b/test/data/format/inheritedExtensions.kt
@@ -0,0 +1,11 @@
+open class Foo
+
+class Bar : Foo()
+
+fun Foo.first() {
+
+}
+
+fun Bar.second() {
+
+}
diff --git a/test/data/format/inheritedExtensions.md b/test/data/format/inheritedExtensions.md
new file mode 100644
index 00000000..79137eac
--- /dev/null
+++ b/test/data/format/inheritedExtensions.md
@@ -0,0 +1,21 @@
+[test](test/index) / [Bar](test/-bar/index)
+
+
+# Bar
+
+`class Bar&nbsp;:&nbsp;[Foo](test/-foo/index)`
+
+
+
+### Constructors
+
+
+| [&lt;init&gt;](test/-bar/-init-) | `Bar()` |
+
+
+### Extension Functions
+
+
+| [first](test/first) | `fun [Foo](test/-foo/index).first(): Unit` |
+| [second](test/second) | `fun [Bar](test/-bar/index).second(): Unit` |
+
diff --git a/test/src/format/MarkdownFormatTest.kt b/test/src/format/MarkdownFormatTest.kt
index 728ce20f..bb61fa1c 100644
--- a/test/src/format/MarkdownFormatTest.kt
+++ b/test/src/format/MarkdownFormatTest.kt
@@ -209,4 +209,10 @@ public class MarkdownFormatTest {
markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
}
}
+
+ @Test fun inheritedExtensions() {
+ verifyOutput("test/data/format/inheritedExtensions.kt", ".md") { model, output ->
+ markdownService.appendNodes(tempLocation, output, model.members.single().members.filter { it.name == "Bar" })
+ }
+ }
}