From e3d97bf8ee1f363cece04097cb576c25e87887bd Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 28 Feb 2013 11:40:01 +0100 Subject: [PATCH] IDEA-101944 ("Pointless boolean expression" inspection with multiple '&&' fails) --- .../PointlessBooleanExpressionInspection.java | 22 ++++++++++++++----- .../PointlessBooleanExpression.java | 7 ++++++ .../expected.xml | 7 ++++++ ...ntlessBooleanExpressionInspectionTest.java | 4 ++-- 4 files changed, 32 insertions(+), 8 deletions(-) rename plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/{pointless_boolean_expression_ignore_cont_const => pointless_boolean_expression}/PointlessBooleanExpression.java (81%) rename plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/{pointless_boolean_expression_ignore_cont_const => pointless_boolean_expression}/expected.xml (82%) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspection.java index b522c2f1e176..953bbe18e771 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -183,17 +183,19 @@ public class PointlessBooleanExpressionInspection extends BaseInspection { } buildSimplifiedExpression(expressions, "==", negate, out); } + else { + out.append(expression.getText()); + } } private void buildSimplifiedExpression(List expressions, String token, boolean negate, StringBuilder out) { if (expressions.size() == 1) { final PsiExpression expression = expressions.get(0); - final String expressionText = expression.getText(); if (isBoxedTypeComparison(token, expression)) { - out.append(expressionText).append(" != null && "); + out.append(expression.getText()).append(" != null && "); } if (!negate) { - out.append(expressionText); + out.append(expression.getText()); return; } if (ComparisonUtils.isComparison(expression)) { @@ -206,10 +208,10 @@ public class PointlessBooleanExpressionInspection extends BaseInspection { } else { if (ParenthesesUtils.getPrecedence(expression) > ParenthesesUtils.PREFIX_PRECEDENCE) { - out.append("!(").append(expressionText).append(')'); + out.append("!(").append(expression.getText()).append(')'); } else { - out.append('!').append(expressionText); + out.append('!').append(expression.getText()); } } } @@ -221,11 +223,19 @@ public class PointlessBooleanExpressionInspection extends BaseInspection { for (PsiExpression expression : expressions) { if (useToken) { out.append(token); + final PsiElement previousSibling = expression.getPrevSibling(); + if (previousSibling instanceof PsiWhiteSpace) { + out.append(previousSibling.getText()); + } } else { useToken = true; } buildSimplifiedExpression(expression, out); + final PsiElement nextSibling = expression.getNextSibling(); + if (nextSibling instanceof PsiWhiteSpace) { + out.append(nextSibling.getText()); + } } if (negate) { out.append(')'); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/PointlessBooleanExpression.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/PointlessBooleanExpression.java similarity index 81% rename from plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/PointlessBooleanExpression.java rename to plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/PointlessBooleanExpression.java index 15020be28068..0cfd2f6840ba 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/PointlessBooleanExpression.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/PointlessBooleanExpression.java @@ -28,4 +28,11 @@ class PointlessBooleanExpression { boolean y = false || c; boolean z = b != true; } +} +class Presley { + void elvis(Object king) { + if (true && king != null && king.hashCode() > 1) { + // blah + } + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/expected.xml similarity index 82% rename from plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/expected.xml rename to plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/expected.xml index 1d0a66df6e32..32f91701b161 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/pointless_boolean_expression/expected.xml @@ -42,4 +42,11 @@ <code>b != true</code> can be simplified to '!b' #loc + + PointlessBooleanExpression.java + 34 + Pointless boolean expression + <code>true && king != null && king.hashCode() > 1</code> can be simplified to 'king != null && king.hashCode() > 1' #loc + + diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspectionTest.java index 5c213bf5c00e..fb1751dc2d55 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/controlflow/PointlessBooleanExpressionInspectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,6 @@ public class PointlessBooleanExpressionInspectionTest extends IGInspectionTestCa public void test() throws Exception { final PointlessBooleanExpressionInspection inspection = new PointlessBooleanExpressionInspection(); inspection.m_ignoreExpressionsContainingConstants = true; - doTest("com/siyeh/igtest/controlflow/pointless_boolean_expression_ignore_cont_const", inspection); + doTest("com/siyeh/igtest/controlflow/pointless_boolean_expression", inspection); } } \ No newline at end of file