Skip to content

Commit 27b7e77

Browse files
committed
Java 25 parser: don't merge /// blocks across blank lines
Per JEP 467, a blank line terminates a markdown doc comment, so two `///` blocks separated by an empty line are distinct doc comments. The merging code in `formatWithMarkdownJavaDoc` previously walked backward across all consecutive `///` lines without checking the inter-comment suffix, which interleaved their characters when re-printed. Found while running `FindParseFailures` against `JabRef/jabref` for #7554.
1 parent becae3b commit 27b7e77

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import static java.util.stream.Collectors.*;
6666
import static java.util.stream.StreamSupport.stream;
6767
import static org.openrewrite.Tree.randomId;
68+
import static org.openrewrite.internal.StringUtils.countOccurrences;
6869
import static org.openrewrite.internal.StringUtils.indexOf;
6970
import static org.openrewrite.internal.StringUtils.indexOfNextNonWhitespace;
7071
import static org.openrewrite.java.tree.Space.EMPTY;
@@ -2606,6 +2607,11 @@ private Space formatWithMarkdownJavaDoc(JCTree tree, DocCommentTree commentTree,
26062607
for (int k = last - 1; k >= 0; k--) {
26072608
Comment c = comments.get(k);
26082609
if (!c.isMultiline() && c instanceof TextComment tc && tc.getText().startsWith("/")) {
2610+
// A blank line between two `///` blocks separates them into distinct
2611+
// doc comments per JEP 467; only merge when the suffix contains a single line break.
2612+
if (countOccurrences(c.getSuffix(), "\n") > 1) {
2613+
break;
2614+
}
26092615
first = k;
26102616
} else {
26112617
break;

rewrite-java-tck/src/main/java/org/openrewrite/java/tree/JavadocTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2989,5 +2989,20 @@ class Test {
29892989
)
29902990
);
29912991
}
2992+
2993+
@Issue("https://github.com/openrewrite/rewrite/issues/7554")
2994+
@Test
2995+
void twoTripleSlashBlocksSeparatedByBlankLine() {
2996+
rewriteRun(
2997+
java(
2998+
"""
2999+
/// First doc-comment block.
3000+
3001+
/// Second doc-comment block.
3002+
class Test {}
3003+
"""
3004+
)
3005+
);
3006+
}
29923007
}
29933008
}

0 commit comments

Comments
 (0)