diff options
| author | Błażej Kardyś <bkardys@virtuslab.com> | 2019-11-07 08:21:43 +0100 |
|---|---|---|
| committer | Błażej Kardyś <bkardys@virtuslab.com> | 2019-11-08 18:47:43 +0100 |
| commit | 493951f487910a1306a4129b7e8144e679c0213c (patch) | |
| tree | 15ac0502e76c0a327bb835e31d0e65f499928ec1 /core/src/main/kotlin/Model | |
| parent | 0627b9dd15171db221bee2e5a6b0082aec813c98 (diff) | |
| download | dokka-493951f487910a1306a4129b7e8144e679c0213c.tar.gz dokka-493951f487910a1306a4129b7e8144e679c0213c.tar.bz2 dokka-493951f487910a1306a4129b7e8144e679c0213c.zip | |
Moving platform merging to documentationNodes
Diffstat (limited to 'core/src/main/kotlin/Model')
| -rw-r--r-- | core/src/main/kotlin/Model/DocumentationNode.kt | 51 | ||||
| -rw-r--r-- | core/src/main/kotlin/Model/transformers/DocumentationNodeTransformer.kt | 1 | ||||
| -rw-r--r-- | core/src/main/kotlin/Model/transformers/DocumentationNodesMerger.kt (renamed from core/src/main/kotlin/Model/transformers/ActualExpectedMerger.kt) | 39 |
3 files changed, 62 insertions, 29 deletions
diff --git a/core/src/main/kotlin/Model/DocumentationNode.kt b/core/src/main/kotlin/Model/DocumentationNode.kt index 99764fac..7efe6818 100644 --- a/core/src/main/kotlin/Model/DocumentationNode.kt +++ b/core/src/main/kotlin/Model/DocumentationNode.kt @@ -5,10 +5,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag class Module(val packages: List<Package>) : DocumentationNode<Nothing>() { - override val docTags: List<KDocTag> = emptyList() - override val dri: DRI = DRI.topLevel - override val children: List<Package> = packages } @@ -19,8 +16,6 @@ class Package( override val classes: List<Class> ) : ScopeNode<Nothing>() { val name = dri.packageName.orEmpty() - - override val docTags: List<KDocTag> = emptyList() } class Class( @@ -30,8 +25,8 @@ class Class( override val functions: List<Function>, override val properties: List<Property>, override val classes: List<Class>, - override val docTags: List<KDocTag>, - override val descriptors: List<ClassDescriptor> + override val expectDescriptor: Descriptor<ClassDescriptor>?, + override val actualDescriptors: List<Descriptor<ClassDescriptor>> ) : ScopeNode<ClassDescriptor>() class Function( @@ -39,8 +34,8 @@ class Function( val name: String, override val receiver: Parameter?, val parameters: List<Parameter>, - override val docTags: List<KDocTag>, - override val descriptors: List<FunctionDescriptor> + override val expectDescriptor: Descriptor<FunctionDescriptor>?, + override val actualDescriptors: List<Descriptor<FunctionDescriptor>> ) : CallableNode<FunctionDescriptor>() { override val children: List<Parameter> get() = listOfNotNull(receiver) + parameters @@ -50,8 +45,8 @@ class Property( override val dri: DRI, val name: String, override val receiver: Parameter?, - override val docTags: List<KDocTag>, - override val descriptors: List<PropertyDescriptor> + override val expectDescriptor: Descriptor<PropertyDescriptor>?, + override val actualDescriptors: List<Descriptor<PropertyDescriptor>> ) : CallableNode<PropertyDescriptor>() { override val children: List<Parameter> get() = listOfNotNull(receiver) @@ -61,35 +56,51 @@ class Property( class Parameter( override val dri: DRI, val name: String?, - override val docTags: List<KDocTag>, - override val descriptors: List<ParameterDescriptor> + override val actualDescriptors: List<Descriptor<ParameterDescriptor>> ) : DocumentationNode<ParameterDescriptor>() { override val children: List<DocumentationNode<*>> get() = emptyList() } -abstract class DocumentationNode<out T : DeclarationDescriptor> { - open val descriptors: List<T> = emptyList() +class Descriptor<out T : DeclarationDescriptor>( + val descriptor: T, + val docTag: KDocTag?, + val links: Map<String, DRI>, + val passes: List<String> +) : DeclarationDescriptor by descriptor { + + override fun equals(other: Any?): Boolean = + other is Descriptor<*> && ( + descriptor.toString() == other.descriptor.toString() && + docTag?.text == other.docTag?.text && + links == other.links) + + override fun hashCode(): Int = + listOf(descriptor.toString(), docTag?.text, links).hashCode() +} - abstract val docTags: List<KDocTag> // TODO: replace in the future with more robust doc-comment model +abstract class DocumentationNode<out T : DeclarationDescriptor> { + open val expectDescriptor: Descriptor<T>? = null + open val actualDescriptors: List<Descriptor<T>> = emptyList() + val descriptors by lazy { listOfNotNull(expectDescriptor) + actualDescriptors } abstract val dri: DRI abstract val children: List<DocumentationNode<*>> override fun toString(): String { - return "${javaClass.simpleName}($dri)" + briefDocstring.takeIf { it.isNotBlank() }?.let { " [$it]"}.orEmpty() + return "${javaClass.simpleName}($dri)" + briefDocstring.takeIf { it.isNotBlank() }?.let { " [$it]" }.orEmpty() } override fun equals(other: Any?) = other is DocumentationNode<*> && this.dri == other.dri override fun hashCode() = dri.hashCode() - val rawDocstrings: List<String> - get() = docTags.map(KDocTag::getContent) + val commentsData: List<Pair<String, Map<String, DRI>>> + get() = descriptors.mapNotNull { it.docTag?.let { tag -> Pair(tag.getContent(), it.links) } } val briefDocstring: String - get() = rawDocstrings.firstOrNull().orEmpty().shorten(40) + get() = descriptors.firstOrNull()?.docTag?.getContent().orEmpty().shorten(40) } abstract class ScopeNode<out T : ClassOrPackageFragmentDescriptor> : DocumentationNode<T>() { diff --git a/core/src/main/kotlin/Model/transformers/DocumentationNodeTransformer.kt b/core/src/main/kotlin/Model/transformers/DocumentationNodeTransformer.kt index f94147fb..318d20b3 100644 --- a/core/src/main/kotlin/Model/transformers/DocumentationNodeTransformer.kt +++ b/core/src/main/kotlin/Model/transformers/DocumentationNodeTransformer.kt @@ -4,4 +4,5 @@ import org.jetbrains.dokka.Model.Module interface DocumentationNodeTransformer { operator fun invoke(original: Module): Module + operator fun invoke(modules: Collection<Module>): Module }
\ No newline at end of file diff --git a/core/src/main/kotlin/Model/transformers/ActualExpectedMerger.kt b/core/src/main/kotlin/Model/transformers/DocumentationNodesMerger.kt index 171b41d0..c5a67513 100644 --- a/core/src/main/kotlin/Model/transformers/ActualExpectedMerger.kt +++ b/core/src/main/kotlin/Model/transformers/DocumentationNodesMerger.kt @@ -2,11 +2,14 @@ package org.jetbrains.dokka.Model.transformers import org.jetbrains.dokka.Model.* import org.jetbrains.dokka.Model.Function +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -internal object ActualExpectedMerger : DocumentationNodeTransformer { +internal object DocumentationNodesMerger : DocumentationNodeTransformer { override fun invoke(original: Module) = Module( original.packages.map { mergePackageContent(it) } ) + override fun invoke(modules: Collection<Module>): Module = + Module(merge(modules.flatMap { it.packages }, Package::mergeWith)) } private fun mergePackageContent(original: Package) = Package( @@ -21,21 +24,33 @@ private fun <T: DocumentationNode<*>> merge(elements: List<T>, reducer: (T, T) - .reduce { _, left, right -> reducer(left, right)} .values.toList() +fun <T:DeclarationDescriptor> Descriptor<T>.mergeWith(other: Descriptor<T>?) = Descriptor( + descriptor, + docTag, + links, + (passes + (other?.passes ?: emptyList())).distinct() +) + +fun <T:DeclarationDescriptor> List<Descriptor<T>>.merge() : List<Descriptor<T>> = + groupingBy { it.descriptor }.reduce { + _, left, right -> left.mergeWith(right) + }.values.toList() + fun Function.mergeWith(other: Function) = Function( dri, name, if (receiver != null && other.receiver != null) receiver.mergeWith(other.receiver) else null, merge(parameters + other.parameters, Parameter::mergeWith), - docTags + other.docTags, - descriptors + other.descriptors + expectDescriptor?.mergeWith(other.expectDescriptor), + (actualDescriptors + other.actualDescriptors).merge() ) fun Property.mergeWith(other: Property) = Property( dri, name, if (receiver != null && other.receiver != null) receiver.mergeWith(other.receiver) else null, - docTags + other.docTags, - descriptors + other.descriptors + expectDescriptor?.mergeWith(other.expectDescriptor), + (actualDescriptors + other.actualDescriptors).merge() ) fun Class.mergeWith(other: Class) = Class( @@ -45,13 +60,19 @@ fun Class.mergeWith(other: Class) = Class( merge(functions + other.functions, Function::mergeWith), merge(properties + other.properties, Property::mergeWith), merge(classes + other.classes, Class::mergeWith), - docTags + other.docTags, - descriptors + other.descriptors + expectDescriptor?.mergeWith(other.expectDescriptor), + (actualDescriptors + other.actualDescriptors).merge() ) fun Parameter.mergeWith(other: Parameter) = Parameter( dri, name, - docTags + other.docTags, - descriptors + other.descriptors + (actualDescriptors + other.actualDescriptors).merge() ) + +fun Package.mergeWith(other: Package) = Package( + dri, + merge(functions + other.functions, Function::mergeWith), + merge(properties + other.properties, Property::mergeWith), + merge(classes + other.classes, Class::mergeWith) +)
\ No newline at end of file |
