From b0f6a11fcaf015c57d68600e91a89b32870c9a4f Mon Sep 17 00:00:00 2001 From: vmishenev Date: Thu, 20 Jan 2022 00:34:24 +0300 Subject: [PATCH] Merge constructors --- .../documentables/DefaultPageCreator.kt | 21 ++++++++++-------- .../psi/DefaultPsiToDocumentableTranslator.kt | 22 ++++++++++--------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt index 2328c00eb3..68c7eb0989 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt @@ -371,27 +371,30 @@ open class DefaultPageCreator( +contentForComments(documentables) val csWithConstructor = cs.filterIsInstance() if (csWithConstructor.isNotEmpty()) { - block( + val constructorsToDocumented = csWithConstructor.flatMap { it.constructors } + .filter { it.extra[PrimaryConstructorExtra] == null || it.documentation.isNotEmpty() } + multiBlock( "Constructors", 2, ContentKind.Constructors, - csWithConstructor.flatMap { it.constructors } - .filter { it.extra[PrimaryConstructorExtra] == null || it.documentation.isNotEmpty() }, + constructorsToDocumented.groupBy { it.parameters }.map { (_,v) -> v.first().name to v }, @Suppress("UNCHECKED_CAST") (csWithConstructor as List).sourceSets, needsAnchors = true, extra = PropertyContainer.empty() + SimpleAttr.header("Constructors") - ) { - link(it.name, it.dri, kind = ContentKind.Main) + ) { key, ds -> + link(key, ds.first().dri, kind = ContentKind.Main) sourceSetDependentHint( - it.dri, - it.sourceSets.toSet(), + ds.dri, + ds.sourceSets, kind = ContentKind.SourceSetDependentHint, styles = emptySet(), extra = PropertyContainer.empty() ) { - +buildSignature(it) - contentForBrief(it) + ds.forEach { + +buildSignature(it) + contentForBrief(it) + } } } } diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index e7028ef028..9e1243d64a 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -29,34 +29,29 @@ import org.jetbrains.dokka.model.AnnotationTarget import org.jetbrains.dokka.model.doc.DocumentationNode import org.jetbrains.dokka.model.doc.Param import org.jetbrains.dokka.model.properties.PropertyContainer -import org.jetbrains.dokka.model.properties.WithExtraProperties import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle import org.jetbrains.dokka.transformers.sources.AsyncSourceToDocumentableTranslator -import org.jetbrains.dokka.transformers.sources.SourceToDocumentableTranslator import org.jetbrains.dokka.utilities.DokkaLogger import org.jetbrains.dokka.utilities.parallelForEach import org.jetbrains.dokka.utilities.parallelMap import org.jetbrains.dokka.utilities.parallelMapNotNull +import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation -import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot -import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.java.JavaVisibilities -import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaClassDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.util.javaResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.util.resolveToDescriptor import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName -import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName import org.jetbrains.kotlin.load.java.propertyNamesBySetMethodName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance -import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.io.File @@ -169,7 +164,12 @@ class DefaultPsiToDocumentableTranslator( setOf(sourceSetData) ) } - + private fun resolveLazyUltraLightClassContentIfNeeded(psi: PsiClass) { + val lightClass = psi as? KtUltraLightClass ?: return + val resolutionFacade = psi.javaResolutionFacade() ?: return + val descriptor = lightClass.resolveToDescriptor(resolutionFacade) as? LazyClassDescriptor ?: return + descriptor.forceResolveAllContents() + } private suspend fun parseClasslike(psi: PsiClass, parent: DRI): DClasslike = coroutineScope { with(psi) { val dri = parent.withClass(name.toString()) @@ -196,6 +196,7 @@ class DefaultPsiToDocumentableTranslator( superTypes.forEach { type -> (type as? PsiClassType)?.resolve()?.let { + //resolveLazyUltraLightClassContentIfNeeded(it) val definedAt = DRI.from(it) it.methods.forEach { method -> val hash = method.hash @@ -658,4 +659,5 @@ class DefaultPsiToDocumentableTranslator( val superclass: TypeConstructor?, val interfaces: List ) + }