From aeb2014eee704be377c06205d16f60562d2a8cf1 Mon Sep 17 00:00:00 2001 From: Błażej Kardyś Date: Fri, 17 Jul 2020 03:48:03 +0200 Subject: Fixing javadoc comment parser for psi files --- .../jetbrains/dokka/javadoc/JavadocPageCreator.kt | 21 ++++--- .../javadoc/location/JavadocLocationProvider.kt | 5 +- .../dokka/javadoc/pages/JavadocPageNodes.kt | 1 + .../renderer/JavadocContentToHtmlTranslator.kt | 65 +++++++++++++++------- .../JavadocContentToTemplateMapTranslator.kt | 13 ++--- .../dokka/javadoc/renderer/KorteJavadocRenderer.kt | 2 +- .../javadoc/src/main/resources/views/class.korte | 2 +- 7 files changed, 70 insertions(+), 39 deletions(-) (limited to 'plugins/javadoc/src/main') diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/JavadocPageCreator.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/JavadocPageCreator.kt index 8b86fab0..b3bb49d3 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/JavadocPageCreator.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/JavadocPageCreator.kt @@ -66,7 +66,8 @@ open class JavadocPageCreator( ) }, documentable = c, - extra = ((c as? WithExtraProperties)?.extra ?: PropertyContainer.empty()) + c.indexesInDocumentation() + extra = ((c as? WithExtraProperties)?.extra + ?: PropertyContainer.empty()) + c.indexesInDocumentation() ) } @@ -142,6 +143,7 @@ open class JavadocPageCreator( dri = dri, signature = signatureForNode(this, jvm), brief = brief(jvm), + description = descriptionToContentNodes(jvm), parameters = parameters.mapNotNull { val signature = signatureForNode(it, jvm) signature.modifiers?.let { type -> @@ -194,16 +196,21 @@ open class JavadocPageCreator( briefFromContentNodes(descriptionToContentNodes(sourceSet)) private fun briefFromContentNodes(description: List): List { - val contents = mutableListOf() - for (node in description) { + var sentenceFound = false + fun lookthrough(node: ContentNode): ContentNode = if (node is ContentText && firstSentenceRegex.containsMatchIn(node.text)) { - contents.add(node.copy(text = firstSentenceRegex.find(node.text)?.value.orEmpty())) - break + sentenceFound = true + node.copy(text = firstSentenceRegex.find(node.text)?.value.orEmpty()) + } else if (node is ContentGroup) { + node.copy(children = node.children.mapNotNull { + if (!sentenceFound) lookthrough(it) else null + }, style = node.style - TextStyle.Paragraph) } else { - contents.add(node) + node } + return description.mapNotNull { + if (!sentenceFound) lookthrough(it) else null } - return contents } private fun DParameter.brief(sourceSet: DokkaSourceSet? = highestJvmSourceSet): List = diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt index 7f27ff18..e0a7768c 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/location/JavadocLocationProvider.kt @@ -66,7 +66,7 @@ class JavadocLocationProvider(pageRoot: RootPageNode, dokkaContext: DokkaContext override fun resolve(dri: DRI, sourceSets: Set, context: PageNode?): String { return nodeIndex[dri]?.let { resolve(it, context) } - ?: nodeIndex[dri.parent]?.let { + ?: nodeIndex[dri.parent]?.takeIf { it is JavadocClasslikePageNode }?.let { val anchor = when (val anchorElement = (it as? JavadocClasslikePageNode)?.findAnchorableByDRI(dri)) { is JavadocFunctionNode -> anchorElement.getAnchor() is JavadocEntryNode -> anchorElement.name @@ -80,7 +80,8 @@ class JavadocLocationProvider(pageRoot: RootPageNode, dokkaContext: DokkaContext private fun JavadocFunctionNode.getAnchor(): String = "$name(${parameters.joinToString(",") { - when (val bound = if (it.typeBound is org.jetbrains.dokka.model.Nullable) it.typeBound.inner else it.typeBound) { + when (val bound = + if (it.typeBound is org.jetbrains.dokka.model.Nullable) it.typeBound.inner else it.typeBound) { is TypeConstructor -> bound.dri.classNames.orEmpty() is OtherParameter -> bound.name is PrimitiveJavaType -> bound.name diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt index 790e15c5..ec4591c3 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/pages/JavadocPageNodes.kt @@ -115,6 +115,7 @@ data class JavadocPropertyNode( data class JavadocFunctionNode( val signature: JavadocSignatureContentNode, val brief: List, + val description: List, val parameters: List, val name: String, override val dri: DRI, diff --git a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/renderer/JavadocContentToHtmlTranslator.kt b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/renderer/JavadocContentToHtmlTranslator.kt index 906c9d5a..1e9a3d65 100644 --- a/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/renderer/JavadocContentToHtmlTranslator.kt +++ b/plugins/javadoc/src/main/kotlin/org/jetbrains/dokka/javadoc/renderer/JavadocContentToHtmlTranslator.kt @@ -14,37 +14,51 @@ internal class JavadocContentToHtmlTranslator( fun htmlForContentNode(node: ContentNode, relative: PageNode?): String = when (node) { - is ContentGroup -> htmlForContentNodes(node.children, node.style, relative) - is ContentText -> buildText(node) - is ContentDRILink -> buildLink( - locationProvider.resolve(node.address, node.sourceSets, relative), - htmlForContentNodes(node.children, node.style, relative) - ) - is ContentResolvedLink -> buildLink(node.address, htmlForContentNodes(node.children, node.style, relative)) - is ContentCode -> htmlForCode(node.children) + is ContentGroup -> + if (node.style.contains(TextStyle.Paragraph)) htmlForParagraph(node.children, relative) + else htmlForContentNodes(node.children, relative) + is ContentText -> htmlForText(node) + is ContentDRILink -> buildLinkFromNode(node, relative) + is ContentResolvedLink -> buildLinkFromNode(node, relative) + is ContentCode -> htmlForCode(node.children, relative) + is ContentList -> htmlForList(node.children, relative) is JavadocSignatureContentNode -> htmlForSignature(node, relative) + is ContentBreakLine -> "
" else -> "" } - fun htmlForContentNodes(list: List, styles: Set