From 00913bf0279916e237b83a0e5bf3da4309a4ee59 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Mon, 1 Apr 2019 17:29:45 +0300 Subject: [PATCH] deprecation inspection: do not suggest fix if method is not applicable IDEA-209685 --- .../DeprecationInspectionBase.java | 6 ++++++ .../quickFix/beforeMismatchQualifier.java | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 java/java-tests/testData/inspection/deprecation/quickFix/beforeMismatchQualifier.java 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 61552131005e..3d1a10924810 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 @@ -234,6 +234,12 @@ public abstract class DeprecationInspectionBase extends LocalInspectionTool { else { PsiExpression qualifierExpression = call.getMethodExpression().getQualifierExpression(); qualifierText = qualifierExpression == null ? "" : qualifierExpression.getText() + "."; + + PsiType qualifierType = ExpressionUtils.getQualifierOrThis(call.getMethodExpression()).getType(); + PsiClass qualifierClass = PsiUtil.resolveClassInType(qualifierType); + if (qualifierClass == null) return false; + PsiClass suggestedClass = suggestedReplacement.getContainingClass(); + if (suggestedClass == null || !InheritanceUtil.isInheritorOrSelf(qualifierClass, suggestedClass, true)) return false; } PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(initial.getProject()); diff --git a/java/java-tests/testData/inspection/deprecation/quickFix/beforeMismatchQualifier.java b/java/java-tests/testData/inspection/deprecation/quickFix/beforeMismatchQualifier.java new file mode 100644 index 000000000000..9e6b26d0e643 --- /dev/null +++ b/java/java-tests/testData/inspection/deprecation/quickFix/beforeMismatchQualifier.java @@ -0,0 +1,21 @@ +// "Replace method call with Test2.mmm" "false" +class Test { + static void example() { + Test t = new Test(); + t.mmm(); + } + + /** + * {@link Test2#mmm()} + * + */ + @Deprecated + void mmm() { + } + +} + +class Test2 { + void mmm() { + } +}