From 7ff052e4dbac1379b8ee82bb9f3c3df1ff3394ff Mon Sep 17 00:00:00 2001 From: Sougandh S Date: Sun, 9 Aug 2026 08:34:38 +0530 Subject: [PATCH] Honor join_lines_in_comments option for markdown javadoc comments Markdown javadoc comments ignored the join_lines_in_comments preference and always collapsed multi-line paragraphs into a single line regardless of its value. Fix : https://github.com/eclipse-jdt/eclipse.jdt.core/issues/5261 --- .../FormatterMarkdownCommentsTests.java | 84 +++++++++++++++++++ .../formatter/CommentsPreparator.java | 2 +- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterMarkdownCommentsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterMarkdownCommentsTests.java index e9c42cd5b89..775a65a1608 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterMarkdownCommentsTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterMarkdownCommentsTests.java @@ -909,4 +909,88 @@ class Mark61 { formatSource(input, expected); } + public void testMarkdownAndClassicJoinLinesWhenJoinLinesInCommentsIsFalse() throws JavaModelException { + setComplianceLevel(CompilerOptions.VERSION_23); + this.formatterPrefs.join_lines_in_comments = false; + this.formatterPrefs.comment_line_length = 1000; + String input = """ + class Test5 { + /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. + /// Duis sit amet diam nec libero accumsan blandit. + /// Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + /// Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + void main() { + } + + /** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Duis sit amet diam nec libero accumsan blandit. + * Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + * Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + */ + void main2() { + } + } + """; + String expected = """ + class Test5 { + /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. + /// Duis sit amet diam nec libero accumsan blandit. + /// Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + /// Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + void main() { + } + + /** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Duis sit amet diam nec libero accumsan blandit. + * Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + * Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + */ + void main2() { + } + } + """; + formatSource(input, expected); + } + + public void testMarkdownAndClassicJoinLinesWhenJoinLinesInCommentsIsTrue() throws JavaModelException { + setComplianceLevel(CompilerOptions.VERSION_23); + this.formatterPrefs.join_lines_in_comments = true; + this.formatterPrefs.comment_line_length = 1000; + String input = """ + class Test5 { + /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. + /// Duis sit amet diam nec libero accumsan blandit. + /// Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + /// Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + void main() { + } + + /** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Duis sit amet diam nec libero accumsan blandit. + * Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. + * Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + */ + void main2() { + } + } + """; + String expected = """ + class Test5 { + /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sit amet diam nec libero accumsan blandit. Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + void main() { + } + + /** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sit amet diam nec libero accumsan blandit. Quisque non ornare lacus. Suspendisse porta dolor id diam maximus, sed gravida nunc finibus. Aenean vulputate, mi non iaculis sagittis, erat nibh gravida elit, eget feugiat purus tortor sed sem. + */ + void main2() { + } + } + """; + formatSource(input, expected); + } + } \ No newline at end of file diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CommentsPreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CommentsPreparator.java index 5fb7e03af1b..0e3e1e488a9 100644 --- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CommentsPreparator.java +++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CommentsPreparator.java @@ -1512,7 +1512,7 @@ private boolean tokenizeMultilineComment(Token commentToken) { if (lineBreaks > 0) { if (cleanBlankLines && !isMarkdown) lineBreaks = 1; - if (lineBreaks > 1 || (!this.options.join_lines_in_comments && !isMarkdown)) + if (lineBreaks > 1 || !this.options.join_lines_in_comments) outputToken.putLineBreaksBefore(lineBreaks); } if (this.tm.charAt(tokenStart) == '@') {