From f58b175d9a0937bf3c43ba279c17a07d923925eb Mon Sep 17 00:00:00 2001 From: nathsou Date: Fri, 21 Aug 2026 11:04:56 +0200 Subject: [PATCH 1/4] SONARJAVA-6820 Fix S9355 false positives on Eclipse (non-Javadoc) comments --- .../java/checks/AlmostJavadocCheckSample.java | 29 +++++++++++++++++++ .../sonar/java/checks/AlmostJavadocCheck.java | 3 ++ .../org/sonar/l10n/java/rules/java/S9355.html | 24 +++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/java-checks-test-sources/default/src/main/java/checks/AlmostJavadocCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/AlmostJavadocCheckSample.java index 32695186b26..2267a900692 100644 --- a/java-checks-test-sources/default/src/main/java/checks/AlmostJavadocCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/AlmostJavadocCheckSample.java @@ -121,6 +121,35 @@ public String toString() { return name; } + /* + * (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + return 0; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object other) { + return this == other; + } + + /* (non-Javadoc) + * @param ignored this Eclipse stub still contains a Javadoc tag + */ + public void eclipseMarkerWithoutSee(int ignored) { + } + + // Noncompliant@+1 + /* @see java.lang.Object#clone() */ + public Object seeWithoutEclipseMarker() { + return this; + } + record Point(int x, int y) { // Noncompliant@+1 /* @param x the x coordinate */ diff --git a/java-checks/src/main/java/org/sonar/java/checks/AlmostJavadocCheck.java b/java-checks/src/main/java/org/sonar/java/checks/AlmostJavadocCheck.java index dbb292499df..cd99cc030db 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AlmostJavadocCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AlmostJavadocCheck.java @@ -132,6 +132,9 @@ private static Tree previousSibling(Tree tree) { private static boolean isAlmostJavadoc(SyntaxTrivia trivia) { String text = trivia.comment().stripTrailing(); + if (text.contains("(non-Javadoc)")) { + return false; + } if (trivia.isComment(CommentKind.BLOCK)) { return hasTag(text); } diff --git a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S9355.html b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S9355.html index 466fe27486e..87d5cca01db 100644 --- a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S9355.html +++ b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S9355.html @@ -15,6 +15,7 @@

Exceptions

</a>, </strong>, </i>, </pre>, or </code>.
  • The comment does not immediately precede a documentable declaration.
  • The declaration already has a documentation comment.
  • +
  • The comment contains the Eclipse (non-Javadoc) marker.
  • Code examples

    Noncompliant code example

    @@ -75,6 +76,29 @@

    Compliant solution

    Entity load(String id); } +

    Noncompliant code example

    +
    +class Value {
    +  /* @see java.lang.Object#hashCode() */ // Noncompliant: @see tag in a regular comment
    +  @Override
    +  public int hashCode() {
    +    return 0;
    +  }
    +}
    +
    +

    Compliant solution

    +
    +class Value {
    +  /*
    +   * (non-Javadoc)
    +   * @see java.lang.Object#hashCode()
    +   */
    +  @Override
    +  public int hashCode() {
    +    return 0;
    +  }
    +}
    +

    Resources

    Documentation