Package: groovy.org.codenarc.rule.unnecessary

## [Groovy] Class UnnecessaryIfStatementRule

- groovy.org.codenarc.rule.unnecessary.UnnecessaryIfStatementRule

- Rule that checks for unnecessary if statements. If/else statements are considered unnecessary for the four scenarios described below.

  (1) When the if and else blocks contain only an explicit return of `true` and `false` constants. These cases can be replaced by a simple return statement. Examples include:
  - `if (someExpression) return true else return false` - can be replaced by `return someExpression`
  - `if (someExpression) { return true } else { return false }` - can be replaced by `return someExpression`
  - `if (someExpression) { return Boolean.TRUE } else { return Boolean.FALSE }` - can be replaced by `return someExpression`
  (2) When the if statement is the last statement in a block and the if and else blocks contain only `true` and `false` expressions. This is an implicit return of true/false. For example, the if statement in the following code can be replaced by `someExpression`: `boolean myMethod() { doSomething() if (someExpression) true; else false }` (3) When the second-to-last statement in a block is an if statement with no else, where the block contains a single return statement, and the last statement in the block is a return statement, and one return statement returns a `true` expression and the other returns a `false` expression. For example, the if statement in the following code can be replaced by `return expression1`: `if (expression1) { return true } return false` NOTE: This check is disabled by setting checkLastStatementImplicitElse to false. (4) When either the if block or else block of an if statement that is not the last statement in a block contain only a single constant or literal expression For example, the if statement in the following code has no effect and can be removed: `def myMethod() { if (someExpression) { 123 } doSomething() }`
  Authors:
    Chris Mair

- - ### Properties Summary

    Properties
    Type | Name and description
    --- | ---
    `Class` | `astVisitorClass`
    `boolean` | `checkLastStatementImplicitElse`
    `String` | `name`
    `int` | `priority`

- - ### Property Detail

    - #### Class astVisitorClass

    - #### boolean checkLastStatementImplicitElse

    - #### String name

    - #### int priority