diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java index de7aed1cd945..9ac1903c45ac 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java @@ -840,7 +840,16 @@ public class EquivalenceChecker { } final PsiTypeElement typeElement1 = instanceOfExpression1.getCheckType(); final PsiTypeElement typeElement2 = instanceOfExpression2.getCheckType(); - return typeElementsAreEquivalent(typeElement1, typeElement2); + if (!typeElementsAreEquivalent(typeElement1, typeElement2).isExactMatch()) { + return EXACT_MISMATCH; + } + PsiPatternVariable patternVariable1 = JavaPsiPatternUtil.getPatternVariable(instanceOfExpression1.getPattern()); + PsiPatternVariable patternVariable2 = JavaPsiPatternUtil.getPatternVariable(instanceOfExpression2.getPattern()); + if (patternVariable1 == null || patternVariable2 == null) { + return Match.exact(patternVariable1 == patternVariable2); + } + markDeclarationsAsEquivalent(patternVariable1, patternVariable2); + return EXACT_MATCH; } protected Match typeElementsAreEquivalent(PsiTypeElement typeElement1, PsiTypeElement typeElement2) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/InstanceOf.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/InstanceOf.java new file mode 100644 index 000000000000..4e6a987ed3bf --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/redundant_method_override/InstanceOf.java @@ -0,0 +1,39 @@ +class Foo { + void test1(Object o) { + if (((o instanceof ((String s)) && ((s.length() > 42))))) { + System.out.println(s); + } + } + + void test2(Object o) { + if (o instanceof String s && s.length() > 42) { + System.out.println(s); + } + } + + void test3(Object o) { + if (o instanceof String s && s.length() > 42) { + System.out.println(s); + } + } +} + +class Bar extends Foo { + void test1(Object o) { + if (o instanceof String str && str.length() > 42) { + System.out.println(str); + } + } + + void test2(Object o) { + if (o instanceof CharSequence str && str.length() > 42) { + System.out.println(str); + } + } + + void test3(Object o) { + if (o instanceof String str && str.length() > 0) { + System.out.println(str); + } + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection17Test.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection17Test.java index d75af4d8b0f7..57e1f0a10cd5 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection17Test.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/RedundantMethodOverrideInspection17Test.java @@ -21,4 +21,8 @@ public class RedundantMethodOverrideInspection17Test extends LightJavaInspection public void testSwitch() { doTest(); } + + public void testInstanceOf() { + doTest(); + } }