From b09f23e0f9df8e2de1b5c978b0ac0dd295db9f1b Mon Sep 17 00:00:00 2001 From: "Kukzze ." Date: Tue, 27 Oct 2026 10:59:23 +0530 Subject: [PATCH 1/2] Fix JavadocAlignParameterDescriptionCheck with inline link tags --- .../checks/JavadocAlignParameterDescriptionCheck.java | 6 ++++++ .../testData/java/testdata/JavadocParamAlignment.java | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/paper-checkstyle/src/main/java/io/papermc/checkstyle/checks/JavadocAlignParameterDescriptionCheck.java b/paper-checkstyle/src/main/java/io/papermc/checkstyle/checks/JavadocAlignParameterDescriptionCheck.java index ef47c063dad3..badf3f240036 100644 --- a/paper-checkstyle/src/main/java/io/papermc/checkstyle/checks/JavadocAlignParameterDescriptionCheck.java +++ b/paper-checkstyle/src/main/java/io/papermc/checkstyle/checks/JavadocAlignParameterDescriptionCheck.java @@ -6,7 +6,9 @@ import com.puppycrawl.tools.checkstyle.utils.JavadocUtil; import io.papermc.checkstyle.Util; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -30,6 +32,7 @@ record ParamDesc(DetailNode node, int startCol) { final List params = new ArrayList<>(); int maxColumn = -1; DetailNode child = detailNode.getFirstChild(); + final Set visitedLines = new HashSet<>(); for (final DetailNode javadocBlock : JavadocUtil.getAllNodesOfType(detailNode, JavadocCommentsTokenTypes.JAVADOC_BLOCK_TAG)) { final DetailNode paramBlock = JavadocUtil.findFirstToken(javadocBlock, JavadocCommentsTokenTypes.PARAM_BLOCK_TAG); if (paramBlock == null) { @@ -41,6 +44,9 @@ record ParamDesc(DetailNode node, int startCol) { } // iterate over all text nodes (multiline) for (final DetailNode textNode : JavadocUtil.getAllNodesOfType(paramDescription, JavadocCommentsTokenTypes.TEXT)) { + if (!visitedLines.add(textNode.getLineNumber())) { + continue; + } final Matcher matcher = SPACE_PREFIX.matcher(textNode.getText()); int paramDescColNum = textNode.getColumnNumber(); if (matcher.find()) { diff --git a/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java b/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java index 7f2531c4d52d..7d55f9d80e81 100644 --- a/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java +++ b/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java @@ -45,4 +45,15 @@ public void method_multiline(String a, String superLongParamName) { public void method_multiline_correct(String a, String superLongParamName) { } + /** + * A method that does something + * + * @param a this is a description + * with a {@link #method(String, String)} link tag + * @param superLongParamName a description + * blabla + */ + public void method_multiline_correct_with_link(String a, String superLongParamName) { + } + } From a8d8f21970ccff0b1625b2242ede48448da00b74 Mon Sep 17 00:00:00 2001 From: "Kukzze ." Date: Tue, 27 Oct 2026 12:09:56 +0530 Subject: [PATCH 2/2] test: add case where description line starts with link tag --- .../testData/java/testdata/JavadocParamAlignment.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java b/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java index 7d55f9d80e81..a1d0b19afdcb 100644 --- a/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java +++ b/paper-checkstyle/src/testData/java/testdata/JavadocParamAlignment.java @@ -56,4 +56,15 @@ public void method_multiline_correct(String a, String superLongParamName) { public void method_multiline_correct_with_link(String a, String superLongParamName) { } + /** + * A method where line 2 starts with a link tag + * + * @param a this is a description + * {@link #method(String, String)} is at line start + * @param superLongParamName a description + * blabla + */ + public void method_line2_starts_with_link(String a, String superLongParamName) { + } + }