From f1c87220b3da0f01b573c0342bff2fec071e28f5 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Mon, 26 Sep 2016 17:51:24 +0300 Subject: [PATCH] Java inspection: Don't offer to replace this.quals() and super.equals() with Objects.equals() (IDEA-161707) --- .../EqualsReplaceableByObjectsCallInspection.java | 5 ++++- .../EqualsReplaceableByObjectsCall.java | 14 ++++++++++++++ .../EqualsReplaceableByObjectsCallCheckNull.java | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java index 5d61b6dc09f6..74dbc683ac67 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java @@ -123,6 +123,10 @@ public class EqualsReplaceableByObjectsCallInspection extends BaseInspection { if (!HardcodedMethodConstants.EQUALS.equals(methodName)) { return; } + final PsiExpression qualifierExpression = getQualifierExpression(expression); + if (qualifierExpression instanceof PsiThisExpression || qualifierExpression instanceof PsiSuperExpression) { + return; + } final PsiElement maybeBinary = PsiTreeUtil.skipParentsOfType(expression, PsiParenthesizedExpression.class, PsiPrefixExpression.class); if (maybeBinary instanceof PsiBinaryExpression) { if (processNotNullCheck((PsiBinaryExpression)maybeBinary)) { @@ -130,7 +134,6 @@ public class EqualsReplaceableByObjectsCallInspection extends BaseInspection { } } if (!checkNotNull) { - final PsiExpression qualifierExpression = getQualifierExpression(expression); if (qualifierExpression == null) { return; } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCall.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCall.java index b02a5a72e455..91f4f15b5320 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCall.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCall.java @@ -35,4 +35,18 @@ class EqualsReplaceableByObjectsCall { String s; T copy() { T t = new T(); t.s = s; return t; } } + + static class X extends T { + public boolean equals(Object o) { + return super.equals(o); + } + + boolean same(T t) { + return this == t || this != null && this.equals(t); + } + + boolean different(T t) { + return t != this && (t == null || !t.equals(this)); + } + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCallCheckNull.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCallCheckNull.java index 2336a461c554..294169a942a3 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCallCheckNull.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/equals_replaceable_by_objects_call/EqualsReplaceableByObjectsCallCheckNull.java @@ -35,4 +35,18 @@ class EqualsReplaceableByObjectsCall { String s; T copy() { T t = new T(); t.s = s; return t; } } + + static class X extends T { + public boolean equals(Object o) { + return super.equals(o); + } + + boolean same(T t) { + return this == t || this != null && this.equals(t); + } + + boolean different(T t) { + return t != this && (t == null || !t.equals(this)); + } + } } \ No newline at end of file