diff options
author | Kamil Doległo <9080183+kamildoleglo@users.noreply.github.com> | 2021-05-17 20:45:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-17 20:45:00 +0200 |
commit | d89be4ba91b8c5cb5e9e34063873004992ee884f (patch) | |
tree | 6b4a1ece6ae5f1d0d0675fb7a08801182d89f50e /plugins | |
parent | c94c4baedb6571f27c8a99a419f9bb4c26c4885a (diff) | |
download | dokka-d89be4ba91b8c5cb5e9e34063873004992ee884f.tar.gz dokka-d89be4ba91b8c5cb5e9e34063873004992ee884f.tar.bz2 dokka-d89be4ba91b8c5cb5e9e34063873004992ee884f.zip |
Fix preserving spaces in Javadoc comments (#1923)
Fixes #1895
Diffstat (limited to 'plugins')
3 files changed, 54 insertions, 4 deletions
diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index cd2bbfc6..f728c8a7 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -264,7 +264,7 @@ class DefaultPsiToDocumentableTranslator( name.orEmpty(), fields.filterIsInstance<PsiEnumConstant>().map { entry -> DEnumEntry( - dri.withClass("${entry.name}"), + dri.withClass(entry.name), entry.name, javadocParser.parseDocumentation(entry).toSourceSetDependent(), null, diff --git a/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt b/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt index a02bceac..dc93568f 100644 --- a/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt +++ b/plugins/base/src/main/kotlin/translators/psi/parsers/JavadocParser.kt @@ -213,9 +213,9 @@ class JavadocParser( javadoc doesn't care about it. */ text.let { - if ((prevSibling as? PsiDocToken)?.isLeadingAsterisk() == true && text != " " && state.previousElement !is PsiInlineDocTag) it?.trimStart() else it + if ((prevSibling as? PsiDocToken)?.isLeadingAsterisk() == true && text.isNotBlank() && state.previousElement !is PsiInlineDocTag) it?.trimStart() else it }?.let { - if ((nextSibling as? PsiDocToken)?.isLeadingAsterisk() == true && text != " ") it.trimEnd() else it + if ((nextSibling as? PsiDocToken)?.isLeadingAsterisk() == true && text.isNotBlank()) it.trimEnd() else it }?.let { if (shouldHaveSpaceAtTheEnd()) "$it " else it } @@ -253,7 +253,7 @@ class JavadocParser( val lastHtmlTag = text.trim().substringAfterLast("<") val endsWithAnUnclosedTag = lastHtmlTag.endsWith(">") && !lastHtmlTag.startsWith("</") - return (nextSibling as? PsiWhiteSpace)?.text == "\n " && + return (nextSibling as? PsiWhiteSpace)?.text?.startsWith("\n ") == true && (getNextSiblingIgnoringWhitespace() as? PsiDocToken)?.tokenType != JavaDocTokenTypes.INSTANCE.commentEnd() && nextNotEmptySibling?.isLeadingAsterisk() == true && furtherNotEmptySibling?.tokenType == JavaDocTokenTypes.INSTANCE.commentData() && diff --git a/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt b/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt new file mode 100644 index 00000000..a6a1413c --- /dev/null +++ b/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt @@ -0,0 +1,50 @@ +package parsers + +import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest +import org.jetbrains.dokka.model.DEnum +import org.jetbrains.dokka.model.DModule +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import utils.text + +class JavadocParserTest : BaseAbstractTest() { + + private fun performJavadocTest(testOperation: (DModule) -> Unit) { + val configuration = dokkaConfiguration { + sourceSets { + sourceSet { + sourceRoots = listOf("src/main/java") + } + } + } + + testInline( + """ + |/src/main/java/sample/Date2.java + | + |package docs + |/** + | * class level docs + | */ + |public enum AnEnumType { + | /** + | * content being refreshed, which can be a result of + | * invalidation, refresh that may contain content updates, or the initial load. + | */ + | REFRESH + |} + """.trimIndent(), + configuration + ) { + documentablesMergingStage = testOperation + } + } + + @Test + fun `correctly parsed list`() { + performJavadocTest { module -> + val docs = (module.packages.single().classlikes.single() as DEnum).entries.single().documentation.values.single().children.single().root.text() + assertEquals("content being refreshed, which can be a result of invalidation, refresh that may contain content updates, or the initial load.", docs.trimEnd()) + } + } +} |