From 4965e5378f011a07f6cec956c8755c293b4da9be Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 5 Sep 2012 21:48:42 +0200 Subject: [PATCH] IDEA-91079 (If statement could be replaced with conditional expression shall have an option to be ignored when a nested conditional expression exists.) --- .../IfMayBeConditionalInspection.java | 18 +++++++++++++++ .../IfMayBeConditional.java | 22 +++++++++++++++++++ .../if_may_be_conditional/expected.xml | 7 ++++++ 3 files changed, 47 insertions(+) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/IfMayBeConditionalInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/IfMayBeConditionalInspection.java index d6cbe937e438..003d693e51dd 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/IfMayBeConditionalInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/IfMayBeConditionalInspection.java @@ -196,6 +196,16 @@ public class IfMayBeConditionalInspection extends BaseInspection { if (!(elseStatement instanceof PsiReturnStatement)) { return; } + final PsiReturnStatement thenReturnStatement = (PsiReturnStatement)thenStatement; + final PsiExpression thenReturnValue = ParenthesesUtils.stripParentheses(thenReturnStatement.getReturnValue()); + if (thenReturnValue instanceof PsiConditionalExpression) { + return; + } + final PsiReturnStatement elseReturnStatement = (PsiReturnStatement)elseStatement; + final PsiExpression elseReturnValue = ParenthesesUtils.stripParentheses(elseReturnStatement.getReturnValue()); + if (elseReturnValue instanceof PsiConditionalExpression) { + return; + } registerStatementError(statement); } else if (thenStatement instanceof PsiExpressionStatement) { @@ -220,6 +230,14 @@ public class IfMayBeConditionalInspection extends BaseInspection { if (!EquivalenceChecker.expressionsAreEquivalent(thenLhs, elseLhs)) { return; } + final PsiExpression thenRhs = ParenthesesUtils.stripParentheses(thenAssignmentExpression.getRExpression()); + if (thenRhs instanceof PsiConditionalExpression) { + return; + } + final PsiExpression elseRhs = ParenthesesUtils.stripParentheses(elseAssignmentExpression.getRExpression()); + if (elseRhs instanceof PsiConditionalExpression) { + return; + } registerStatementError(statement); } else if (reportMethodCalls && thenExpression instanceof PsiMethodCallExpression) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/IfMayBeConditional.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/IfMayBeConditional.java index 7eaad4416b06..1109243d24a2 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/IfMayBeConditional.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/IfMayBeConditional.java @@ -20,4 +20,26 @@ public class IfMayBeConditional { sb.append("DescriptorUtils.getFQName(cd)",0, 1); } } + + int foo4(int a, int b) { + if (a < b) return a; + else return b; + } + + int foo5(int a, int b, int c) { + if (a < b) { + return a; + } else { + return b < c ? b : c; + } + } + + void foo6(int a, int b, int c) { + int i; + if (a < b) { + i = a; + } else { + i = b < c ? b : c; + } + } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/expected.xml index 6d0c371f2349..3ecb05a6e414 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/if_may_be_conditional/expected.xml @@ -14,4 +14,11 @@ 'if' statement could be replaced with simple conditional expression <code>if</code> could be replaced with simple conditional expression #loc + + + IfMayBeConditional.java + 25 + 'if' statement could be replaced with conditional expression + <code>if</code> could be replaced with conditional expression #loc + \ No newline at end of file