diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTag.java b/core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTag.java index b10211d78c4..f06673fc523 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTag.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTag.java @@ -87,19 +87,35 @@ private Description handle(@Nullable DocTreePath path, VisitorState state) { for (var entry : tagStrings.entrySet()) { int pos = entry.getKey(); if (!recognisedTags.contains(pos)) { - state.reportMatch( - buildDescription(getDiagnosticPosition(pos, path.getTreePath().getLeaf())) - .setMessage( - "This Javadoc tag '%s' wasn't recognised by the parser. Is it malformed" - + " somehow, perhaps with mismatched braces?", - entry.getValue()) - .build()); + // Check if this is a well-formed tag that we can verify independently + // If we found a properly closed tag (ending with '}'), it's likely valid + // even if position matching with DocTree fails due to annotation-related offsets + String tag = entry.getValue(); + if (!isValidTag(tag)) { + state.reportMatch( + buildDescription(getDiagnosticPosition(pos, path.getTreePath().getLeaf())) + .setMessage( + "This Javadoc tag '%s' wasn't recognised by the parser. Is it malformed" + + " somehow, perhaps with mismatched braces?", + tag) + .build()); + } } } return NO_MATCH; } + /** + * Validates if a tag string appears to be well-formed. + * Returns true if the tag looks valid (e.g., has proper closing brace). + */ + private static boolean isValidTag(String tag) { + // A valid tag should be of the form {@code ...} or {@link ...} + // and should contain a closing brace + return tag.endsWith("}"); + } + private ImmutableRangeSet findRecognisedTags(DocTreePath path, VisitorState state) { RangeSet tags = TreeRangeSet.create(); new DocTreePathScanner() { diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTagTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTagTest.java index 632535eb1b4..640897b922b 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTagTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTagTest.java @@ -128,4 +128,31 @@ class Test {} """) .doTest(); } + + @Test + public void lombokGetterOnClass() { + helper + .addSourceLines( + "Lombok.java", + "import lombok.Getter;", + "@Getter", + "public class Reproducer {", + " /** See {@link String} */", + " private String str = \"\";", + "}") + .doTest(); + } + + @Test + public void lombokGetterOnField() { + helper + .addSourceLines( + "Lombok.java", + "import lombok.Getter;", + "public class Reproducer {", + " /** See {@link String} */", + " @Getter private String str = \"\";", + "}") + .doTest(); + } }