mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java inspection: Handle static fields in EqualsReplaceableByObjectsCallInspection (IDEA-161076)
This commit is contained in:
+19
-7
@@ -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;
|
||||
|
||||
+10
@@ -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);
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class T {
|
||||
static class A {
|
||||
static String a;
|
||||
}
|
||||
static boolean same(String s) {
|
||||
return A.a != null && A.a.<caret>equals(s);
|
||||
}
|
||||
}
|
||||
+10
@@ -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);
|
||||
}
|
||||
}
|
||||
+8
@@ -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.<caret>equals(s));
|
||||
}
|
||||
}
|
||||
+19
@@ -49,4 +49,23 @@ class EqualsReplaceableByObjectsCall {
|
||||
return <warning descr="'t != this && (t == null || !t.equals(this))' replaceable by 'Objects.equals()' expression">t != this && (t == null || !t.equals(this))</warning>;
|
||||
}
|
||||
}
|
||||
|
||||
static class A {
|
||||
static String b;
|
||||
static class B {
|
||||
static String c;
|
||||
}
|
||||
}
|
||||
static boolean ab1(String s) {
|
||||
return <warning descr="'A.b.equals(s)' replaceable by 'Objects.equals()' expression">A.b.equals(s)</warning>;
|
||||
}
|
||||
static boolean ab2(String s) {
|
||||
return <warning descr="'A.b != null && A.b.equals(s)' replaceable by 'Objects.equals()' expression">A.b != null && A.b.equals(s)</warning>;
|
||||
}
|
||||
static boolean ab3(String s) {
|
||||
return <warning descr="'A.b == s || A.b != null && A.b.equals(s)' replaceable by 'Objects.equals()' expression">A.b == s || A.b != null && A.b.equals(s)</warning>;
|
||||
}
|
||||
static boolean abc(String s) {
|
||||
return <warning descr="'A.B.c == s || A.B.c != null && A.B.c.equals(s)' replaceable by 'Objects.equals()' expression">A.B.c == s || A.B.c != null && A.B.c.equals(s)</warning>;
|
||||
}
|
||||
}
|
||||
+19
@@ -49,4 +49,23 @@ class EqualsReplaceableByObjectsCall {
|
||||
return <warning descr="'t != this && (t == null || !t.equals(this))' replaceable by 'Objects.equals()' expression">t != this && (t == null || !t.equals(this))</warning>;
|
||||
}
|
||||
}
|
||||
|
||||
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 <warning descr="'A.b != null && A.b.equals(s)' replaceable by 'Objects.equals()' expression">A.b != null && A.b.equals(s)</warning>;
|
||||
}
|
||||
static boolean ab3(String s) {
|
||||
return <warning descr="'A.b == s || A.b != null && A.b.equals(s)' replaceable by 'Objects.equals()' expression">A.b == s || A.b != null && A.b.equals(s)</warning>;
|
||||
}
|
||||
static boolean abc(String s) {
|
||||
return <warning descr="'A.B.c == s || A.B.c != null && A.B.c.equals(s)' replaceable by 'Objects.equals()' expression">A.B.c == s || A.B.c != null && A.B.c.equals(s)</warning>;
|
||||
}
|
||||
}
|
||||
+3
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user