diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/TrivialIfInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/TrivialIfInspection.java index 76c2abd5e237..fa59bf7723f4 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/TrivialIfInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/TrivialIfInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2017 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. @@ -109,6 +109,33 @@ public class TrivialIfInspection extends BaseInspection implements CleanupLocalI else if (isSimplifiableImplicitAssignmentNegated(statement)) { replaceSimplifiableImplicitAssignmentNegated(statement); } + else if (isSimplifiableAssert(statement)) { + replaceSimplifiableAssert(statement); + } + } + + private static void replaceSimplifiableAssert(PsiIfStatement statement) { + final PsiExpression condition = statement.getCondition(); + if (condition == null) { + return; + } + final String conditionText = BoolUtils.getNegatedExpressionText(condition); + if (statement.getElseBranch() != null) { + return; + } + final PsiStatement thenBranch = ControlFlowUtils.stripBraces(statement.getThenBranch()); + if (!(thenBranch instanceof PsiAssertStatement)) { + return; + } + final PsiAssertStatement assertStatement = (PsiAssertStatement)thenBranch; + final PsiExpression assertCondition = assertStatement.getAssertCondition(); + if (assertCondition == null) { + return; + } + final PsiExpression replacementCondition = JavaPsiFacade.getElementFactory(statement.getProject()).createExpressionFromText( + BoolUtils.isFalse(assertCondition) ? conditionText : conditionText + "||" + assertCondition.getText(), statement); + assertCondition.replace(replacementCondition); + statement.replace(assertStatement); } private static void replaceSimplifiableImplicitReturn(PsiIfStatement statement) { @@ -282,31 +309,15 @@ public class TrivialIfInspection extends BaseInspection implements CleanupLocalI if (PsiUtilCore.hasErrorElementChild(ifStatement)) { return false; } - if (isSimplifiableAssignment(ifStatement)) { - return true; - } - if (isSimplifiableReturn(ifStatement)) { - return true; - } - if (isSimplifiableImplicitReturn(ifStatement)) { - return true; - } - if (isSimplifiableAssignmentNegated(ifStatement)) { - return true; - } - if (isSimplifiableReturnNegated(ifStatement)) { - return true; - } - if (isSimplifiableImplicitReturnNegated(ifStatement)) { - return true; - } - if (isSimplifiableImplicitAssignment(ifStatement)) { - return true; - } - if (isSimplifiableImplicitAssignmentNegated(ifStatement)) { - return true; - } - return false; + return isSimplifiableAssignment(ifStatement) || + isSimplifiableReturn(ifStatement) || + isSimplifiableImplicitReturn(ifStatement) || + isSimplifiableAssignmentNegated(ifStatement) || + isSimplifiableReturnNegated(ifStatement) || + isSimplifiableImplicitReturnNegated(ifStatement) || + isSimplifiableImplicitAssignment(ifStatement) || + isSimplifiableImplicitAssignmentNegated(ifStatement) || + isSimplifiableAssert(ifStatement); } private static boolean isSimplifiableImplicitReturn(PsiIfStatement ifStatement) { @@ -424,4 +435,16 @@ public class TrivialIfInspection extends BaseInspection implements CleanupLocalI final PsiExpression rhs = ParenthesesUtils.stripParentheses(assignment.getRExpression()); return rhs != null && value.equals(rhs.getText()); } + + private static boolean isSimplifiableAssert(PsiIfStatement ifStatement) { + if (ifStatement.getElseBranch() != null) { + return false; + } + final PsiStatement thenBranch = ControlFlowUtils.stripBraces(ifStatement.getThenBranch()); + if (!(thenBranch instanceof PsiAssertStatement)) { + return false; + } + final PsiAssertStatement assertStatement = (PsiAssertStatement)thenBranch; + return assertStatement.getAssertCondition() != null; + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/TrivialIf.html b/plugins/InspectionGadgets/src/inspectionDescriptions/TrivialIf.html index 4c31fbf9d0a2..46fe30403ce4 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/TrivialIf.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/TrivialIf.html @@ -1,7 +1,7 @@
-Reports if statements which can be simplified to single assignment or -return statements. +Reports if statements which can be simplified to single assignment, +return or assert statements.
For example:
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.after.java
new file mode 100644
index 000000000000..8b527976b310
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.after.java
@@ -0,0 +1,6 @@
+class Assert1 {
+
+ void check(String s) {
+ assert s != null && s.length() != 0;
+ }
+}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.java
new file mode 100644
index 000000000000..eabb150a8458
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert1.java
@@ -0,0 +1,8 @@
+class Assert1 {
+
+ void check(String s) {
+