From acf43dc96725c2da58586f2eaf81601c3d3b1cdf Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 16 May 2012 14:49:38 +0200 Subject: [PATCH] IDEA-86056 (Unnecessary 'null' check before 'equals()' call quick fix changes the logic) --- ...implifiableEqualsExpressionInspection.java | 31 ++++++++++++++++--- .../SimplifiableEqualsExpression.java | 28 +++++++++++++++++ .../expected.xml | 26 ++++++++++++++++ ...ifiableEqualsExpressionInspectionTest.java | 11 +++++++ 4 files changed, 91 insertions(+), 5 deletions(-) rename plugins/InspectionGadgets/src/com/siyeh/ig/{style => controlflow}/SimplifiableEqualsExpressionInspection.java (89%) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/SimplifiableEqualsExpression.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/SimplifiableEqualsExpressionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspection.java similarity index 89% rename from plugins/InspectionGadgets/src/com/siyeh/ig/style/SimplifiableEqualsExpressionInspection.java rename to plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspection.java index 76ef652140bf..d53b7ab0572a 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/SimplifiableEqualsExpressionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspection.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.siyeh.ig.style; +package com.siyeh.ig.controlflow; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; @@ -71,7 +71,14 @@ public class SimplifiableEqualsExpressionInspection extends BaseInspection { if (operands.length != 2) { return; } - final PsiExpression operand = ParenthesesUtils.stripParentheses(operands[1]); + PsiExpression operand = ParenthesesUtils.stripParentheses(operands[1]); + if (operand instanceof PsiPrefixExpression) { + final PsiPrefixExpression prefixExpression = (PsiPrefixExpression)operand; + if (!JavaTokenType.EXCL.equals(prefixExpression.getOperationTokenType())) { + return; + } + operand = ParenthesesUtils.stripParentheses(prefixExpression.getOperand()); + } if (!(operand instanceof PsiMethodCallExpression)) { return; } @@ -170,7 +177,15 @@ public class SimplifiableEqualsExpressionInspection extends BaseInspection { return; } final PsiExpression rhs = ParenthesesUtils.stripParentheses(operands[1]); - if (!isEqualsConstant(rhs, variable)) { + if (!(rhs instanceof PsiPrefixExpression)) { + return; + } + final PsiPrefixExpression prefixExpression = (PsiPrefixExpression)rhs; + if (!JavaTokenType.EXCL.equals(prefixExpression.getOperationTokenType())) { + return; + } + final PsiExpression operand = ParenthesesUtils.stripParentheses(prefixExpression.getOperand()); + if (!isEqualsConstant(operand, variable)) { return; } registerError(lhs); @@ -226,8 +241,14 @@ public class SimplifiableEqualsExpressionInspection extends BaseInspection { if (operands.length != 2) { return null; } - final PsiExpression lhs = operands[0]; - final PsiExpression rhs = operands[1]; + final PsiExpression lhs = ParenthesesUtils.stripParentheses(operands[0]); + if (lhs == null) { + return null; + } + final PsiExpression rhs = ParenthesesUtils.stripParentheses(operands[1]); + if (rhs == null) { + return null; + } if (PsiType.NULL.equals(lhs.getType())) { if (!(rhs instanceof PsiReferenceExpression)) { return null; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/SimplifiableEqualsExpression.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/SimplifiableEqualsExpression.java new file mode 100644 index 000000000000..5c0f5a121691 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/SimplifiableEqualsExpression.java @@ -0,0 +1,28 @@ +package com.siyeh.igtest.controlflow.simplifiable_equals_expression; + +public class SimplifiableEqualsExpression { + + void foo(String namespace) { + if (namespace != null && namespace.equals("")) { + return; + } + } + + void bar(String namespace) { + if (namespace == null || !namespace.equals("")) { + return; + } + } + + void baz(Integer i) { + if (i != null && i.equals(1)) { + return; + } + } + + void boz(String namespace) { + if (namespace == null || namespace.equals("")) { // don't warn here + return; + } + } +} diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/expected.xml new file mode 100644 index 000000000000..bf2d793746ba --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/simplifiable_equals_expression/expected.xml @@ -0,0 +1,26 @@ + + + + SimplifiableEqualsExpression.java + 12 + + Unnecessary 'null' check before 'equals()' call + Unnecessary 'null' check #loc + + + + SimplifiableEqualsExpression.java + 18 + + Unnecessary 'null' check before 'equals()' call + Unnecessary 'null' check #loc + + + + SimplifiableEqualsExpression.java + 6 + + Unnecessary 'null' check before 'equals()' call + Unnecessary 'null' check #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspectionTest.java new file mode 100644 index 000000000000..867d44e82f68 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/SimplifiableEqualsExpressionInspectionTest.java @@ -0,0 +1,11 @@ +package com.siyeh.ig.controlflow; + +import com.siyeh.ig.IGInspectionTestCase; + +public class SimplifiableEqualsExpressionInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/controlflow/simplifiable_equals_expression", + new SimplifiableEqualsExpressionInspection()); + } +}