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 9da2221ffc54..50952112d4d3 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/EqualsReplaceableByObjectsCallInspection.java @@ -259,18 +259,30 @@ public class EqualsReplaceableByObjectsCallInspection extends BaseInspection { if (expression instanceof PsiReferenceExpression) { final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)expression; final String referenceName = referenceExpression.getReferenceName(); - if (referenceName != null && referenceExpression.resolve() instanceof PsiVariable) { - final PsiExpression qualifierExpression = ParenthesesUtils.stripParentheses(referenceExpression.getQualifierExpression()); - if (qualifierExpression == null) { - return referenceName; + if (referenceName != null) { + final PsiElement resolved = referenceExpression.resolve(); + if (resolved instanceof PsiVariable || resolved instanceof PsiClass) { + final PsiExpression qualifierExpression = ParenthesesUtils.stripParentheses(referenceExpression.getQualifierExpression()); + if (qualifierExpression == null) { + return referenceName; + } + final String qualifierName = getQualifiedVariableName(qualifierExpression); + return qualifierName != null ? qualifierName + "." + referenceName : null; } - final String qualifierName = getQualifiedVariableName(qualifierExpression); - return qualifierName != null ? qualifierName + "." + referenceName : null; } } else if (expression instanceof PsiQualifiedExpression) { final PsiJavaCodeReferenceElement qualifier = ((PsiQualifiedExpression)expression).getQualifier(); - final String name = expression instanceof PsiThisExpression ? "this" : "super"; + final String name; + if (expression instanceof PsiThisExpression) { + name = "this"; + } + else if (expression instanceof PsiSuperExpression) { + name = "super"; + } + else { + return null; + } return qualifier != null ? qualifier.getQualifiedName() + "." + name : name; } return null; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.after.java new file mode 100644 index 000000000000..bd4d1d11287e --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.after.java @@ -0,0 +1,10 @@ +import java.util.Objects; + +class T { + static class A { + static String a; + } + static boolean same(String s) { + return Objects.equals(A.a, s); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.java new file mode 100644 index 000000000000..d428b7436327 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField.java @@ -0,0 +1,8 @@ +class T { + static class A { + static String a; + } + static boolean same(String s) { + return A.a != null && A.a.equals(s); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.after.java new file mode 100644 index 000000000000..fbe7ed1be7de --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.after.java @@ -0,0 +1,10 @@ +import java.util.Objects; + +class T { + static class A { + static String a; + } + static boolean dfferent(String s) { + return !Objects.equals(A.a, s); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.java new file mode 100644 index 000000000000..fe486012d98d --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/equals_replaceable_by_objects_call/StaticField2.java @@ -0,0 +1,8 @@ +class T { + static class A { + static String a; + } + static boolean dfferent(String s) { + return A.a != s && (A.a == null || !A.a.equals(s)); + } +} \ No newline at end of file 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 91f4f15b5320..6496a70b88e8 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 @@ -49,4 +49,23 @@ class EqualsReplaceableByObjectsCall { return t != this && (t == null || !t.equals(this)); } } + + static class A { + static String b; + static class B { + static String c; + } + } + static boolean ab1(String s) { + return A.b.equals(s); + } + static boolean ab2(String s) { + return A.b != null && A.b.equals(s); + } + static boolean ab3(String s) { + return A.b == s || A.b != null && A.b.equals(s); + } + static boolean abc(String s) { + return A.B.c == s || A.B.c != null && A.B.c.equals(s); + } } \ 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 294169a942a3..f5f035af4a38 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 @@ -49,4 +49,23 @@ class EqualsReplaceableByObjectsCall { return t != this && (t == null || !t.equals(this)); } } + + static class A { + static String b; + static class B { + static String c; + } + } + static boolean ab1(String s) { + return A.b.equals(s); + } + static boolean ab2(String s) { + return A.b != null && A.b.equals(s); + } + static boolean ab3(String s) { + return A.b == s || A.b != null && A.b.equals(s); + } + static boolean abc(String s) { + return A.B.c == s || A.B.c != null && A.B.c.equals(s); + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/EqualsReplaceableByObjectsCallFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/EqualsReplaceableByObjectsCallFixTest.java index 9a4afb0acd87..83fb59dad662 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/EqualsReplaceableByObjectsCallFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/EqualsReplaceableByObjectsCallFixTest.java @@ -48,6 +48,9 @@ public class EqualsReplaceableByObjectsCallFixTest extends IGQuickFixesTestCase public void testQualifiedThisNotEqual() { doTest(); } public void testQualifiedSuperEqual() { doTest(); } + public void testStaticField() { doTest(); } + public void testStaticField2() { doTest(); } + @Override protected void tuneFixture(JavaModuleFixtureBuilder builder) throws Exception { builder.addJdk(IdeaTestUtil.getMockJdk18Path().getPath())