Since Checkstyle 3.2
equals
by default).
max property will only check returns in methods and lambdas that return a specific value (Ex: 'return 1;').
maxForVoid property will only check returns in methods, constructors, and lambdas that have no return type (IE 'return;'). It will only count visible return statements. Return statements not normally written, but implied, at the end of the method/constructor definition will not be taken into account. To disallow "return;" in void return type methods, use a value of 0.
Rationale: Too many return points can mean that code is attempting to do too much or may be difficult to understand.
name | description | type | default value | since |
---|---|---|---|---|
format | Specify method names to ignore. | Pattern | "^equals$" |
3.4 |
max | Specify maximum allowed number of return statements in non-void methods/lambdas. | int | 2 |
3.2 |
maxForVoid | Specify maximum allowed number of return statements in void methods/constructors/lambdas. | int | 1 |
6.19 |
tokens | tokens to check | subset of tokens CTOR_DEF , METHOD_DEF , LAMBDA . | CTOR_DEF , METHOD_DEF , LAMBDA . | 3.2 |
To configure the check so that it doesn't allow more than three
return statements per method (ignoring the equals()
method):
<module name="Checker"> <module name="TreeWalker"> <module name="ReturnCount"> <property name="max" value="3"/> </module> </module> </module>
Example:
public class Example1 { public Example1() {} // ok below, because default void restriction is 1 public Example1(int i) { return; } public int signA(int x) { if (x < -2) { return -1; } return 0; } // violation below, 'max allowed for non-void methods/lambdas is 3' public int signB(int x) { if (x < -2) { return -1; } if (x == 0) { return 0; } if (x > 2) { return 2; } return 1; } // ok below, because non-void restriction is 3 final Predicate<Integer> lambdaA = i -> { if (i > 5) { return true; } return false; }; final Predicate<Integer> lambdaB = i -> { return i > 5; }; public void methodA(int x) {} // ok below, because default void restriction is 1 public void methodB(int x) { return; } }
To configure the check so that it doesn't allow any return statements per void method:
<module name="Checker"> <module name="TreeWalker"> <module name="ReturnCount"> <property name="maxForVoid" value="0"/> </module> </module> </module>
Example:
public class Example2 { public Example2() {} // violation below, 'max allowed for void methods/constructors/lambdas is 0' public Example2(int i) { return; } public int signA(int x) { if (x < -2) { return -1; } return 0; } // violation below, 'max allowed for non-void methods/lambdas is 2' public int signB(int x) { if (x < -2) { return -1; } if (x == 0) { return 0; } if (x > 2) { return 2; } return 1; } // ok below, because default non-void restriction is 2 final Predicate<Integer> lambdaA = i -> { if (i > 5) { return true; } return false; }; final Predicate<Integer> lambdaB = i -> { return i > 5; }; public void methodA(int x) {} // violation below, 'max allowed for void methods/constructors/lambdas is 0' public void methodB(int x) { return; } }
To configure the check so that it doesn't allow more than 2
return statements per method (ignoring the equals()
method) and more than 1 return statements per void method:
<module name="Checker"> <module name="TreeWalker"> <module name="ReturnCount"> <property name="max" value="2"/> <property name="maxForVoid" value="1"/> </module> </module> </module>
Example:
public class Example3 { public Example3() {} // ok below, because default void restriction is 1 public Example3(int i) { return; } public int signA(int x) { if (x < -2) { return -1; } return 0; } // violation below, 'max allowed for non-void methods/lambdas is 2' public int signB(int x) { if (x < -2) { return -1; } if (x == 0) { return 0; } if (x > 2) { return 2; } return 1; } // ok below, because non-void restriction is 2 final Predicate<Integer> lambdaA = i -> { if (i > 5) { return true; } return false; }; final Predicate<Integer> lambdaB = i -> { return i > 5; }; public void methodA(int x) {} // ok below, because default void restriction is 1 public void methodB(int x) { return; } }
To configure the check so that it doesn't allow more than three return statements per method for all methods:
<module name="Checker"> <module name="TreeWalker"> <module name="ReturnCount"> <property name="max" value="3"/> <property name="format" value="^$"/> </module> </module> </module>
Example:
public class Example4 { public Example4() {} // ok below, because default void restriction is 1 public Example4(int i) { return; } public int signA(int x) { if (x < -2) { return -1; } return 0; } // violation below, 'max allowed for non-void methods/lambdas is 3' public int signB(int x) { if (x < -2) { return -1; } if (x == 0) { return 0; } if (x > 2) { return 2; } return 1; } // ok below, because non-void restriction is 3 final Predicate<Integer> lambdaA = i -> { if (i > 5) { return true; } return false; }; final Predicate<Integer> lambdaB = i -> { return i > 5; }; public void methodA(int x) {} // ok below, because default void restriction is 1 public void methodB(int x) { return; } }
To configure the check so that it doesn't allow any return statements in constructors, more than one return statement in all lambda expressions and more than two return statements in methods:
<module name="Checker"> <module name="TreeWalker"> <module name="ReturnCount"> <property name="maxForVoid" value="0"/> <property name="tokens" value="CTOR_DEF"/> </module> <module name="ReturnCount"> <property name="max" value="1"/> <property name="tokens" value="LAMBDA"/> </module> <module name="ReturnCount"> <property name="max" value="2"/> <property name="tokens" value="METHOD_DEF"/> </module> </module> </module>
Example:
public class Example5 { public Example5() {} // violation below, 'max allowed for void methods/constructors/lambdas is 0' public Example5(int i) { return; } public int signA(int x) { if (x < -2) { return -1; } return 0; } // violation below, 'max allowed for non-void methods/lambdas is 2' public int signB(int x) { if (x < -2) { return -1; } if (x == 0) { return 0; } if (x > 2) { return 2; } return 1; } // violation below, 'max allowed for non-void methods/lambdas is 1' final Predicate<Integer> lambdaA = i -> { if (i > 5) { return true; } return false; }; final Predicate<Integer> lambdaB = i -> { return i > 5; }; public void methodA(int x) {} // ok below, because default void restriction is 1 public void methodB(int x) { return; } }
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding