diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/deprecation/DeprecationInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/deprecation/DeprecationInspectionBase.java index 436fa8bbe704..b703e7d76c56 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/deprecation/DeprecationInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/deprecation/DeprecationInspectionBase.java @@ -44,6 +44,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; import java.util.List; +import java.util.Objects; abstract class DeprecationInspectionBase extends BaseJavaBatchLocalInspectionTool { public boolean IGNORE_IN_SAME_OUTERMOST_CLASS; @@ -356,10 +357,14 @@ abstract class DeprecationInspectionBase extends BaseJavaBatchLocalInspectionToo String name = t.getName(); return "link".equals(name) || "see".equals(name); }) - .collect(MoreCollectors.onlyOne()) .map(tag -> tag.getValueElement()) + .filter(Objects::nonNull) .map(value -> value.getReference()) + .filter(Objects::nonNull) .map(reference -> reference.resolve()) + .filter(Objects::nonNull) + .distinct() + .collect(MoreCollectors.onlyOne()) .filter(resolved -> resolved instanceof PsiMethod) .orElse(null); return tagMethod == null || tagMethod.isDeprecated() || tagMethod.isEquivalentTo(method) || !areReplaceable(method, tagMethod, call) diff --git a/java/java-tests/testData/inspection/deprecation/quickFix/afterTwoTags.java b/java/java-tests/testData/inspection/deprecation/quickFix/afterTwoTags.java new file mode 100644 index 000000000000..1172e9a0d13a --- /dev/null +++ b/java/java-tests/testData/inspection/deprecation/quickFix/afterTwoTags.java @@ -0,0 +1,20 @@ +// "Replace method call with Test.mmm1" "true" +class Test { + static void example() { + Test t = new Test(); + Test.mmm1(""); + } + + /** + * {@link Test#mmm1(String)} + * + * @see Test#mmm1(String) + */ + @Deprecated + void mmm(String t) { + } + + static void mmm1(String string) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/deprecation/quickFix/beforeTwoTags.java b/java/java-tests/testData/inspection/deprecation/quickFix/beforeTwoTags.java new file mode 100644 index 000000000000..7e2f33b727cd --- /dev/null +++ b/java/java-tests/testData/inspection/deprecation/quickFix/beforeTwoTags.java @@ -0,0 +1,20 @@ +// "Replace method call with Test.mmm1" "true" +class Test { + static void example() { + Test t = new Test(); + t.mmm(""); + } + + /** + * {@link Test#mmm1(String)} + * + * @see Test#mmm1(String) + */ + @Deprecated + void mmm(String t) { + } + + static void mmm1(String string) { + + } +} \ No newline at end of file