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) {
+    if (s == null || s.length() == 0) {
+      assert false;
+    }
+  }
+}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert2.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert2.after.java
new file mode 100644
index 000000000000..e144f71729b5
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert2.after.java
@@ -0,0 +1,6 @@
+class Assert2 {
+
+  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/Assert2.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert2.java
new file mode 100644
index 000000000000..50867f8aa6be
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/controlflow/trivialIf/Assert2.java
@@ -0,0 +1,8 @@
+class Assert2 {
+
+  void check(String s) {
+    if (s != null) {
+      assert s.length() > 0;
+    }
+  }
+}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java
index 2cef14efe3ae..429c09a8ab11 100644
--- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java
+++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/TrivialIfFixTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2017 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.
@@ -43,4 +43,12 @@ public class TrivialIfFixTest extends IGQuickFixesTestCase {
   public void testNegatedConditional1() {
     doTest();
   }
+
+  public void testAssert1() {
+    doTest();
+  }
+
+  public void testAssert2() {
+    doTest();
+  }
 }
\ No newline at end of file