public final class ReturnCountCheck extends AbstractCheck
Restricts the number of return statements in methods, constructors and lambda expressions
(2 by default). Ignores specified methods (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 be indication that code is attempting to do too much or may be difficult to understand.
Modifier and Type | Class and Description |
---|---|
private class |
ReturnCountCheck.Context
Class to encapsulate information about one method.
|
Modifier and Type | Field and Description |
---|---|
private ReturnCountCheck.Context |
context
Current method context.
|
private java.util.Deque<ReturnCountCheck.Context> |
contextStack
Stack of method contexts.
|
private java.util.regex.Pattern |
format
The regexp to match against.
|
private int |
max
Maximum allowed number of return statements.
|
private int |
maxForVoid
Maximum allowed number of return statements for void methods.
|
static java.lang.String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties"
file.
|
Constructor and Description |
---|
ReturnCountCheck() |
Modifier and Type | Method and Description |
---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
int[] |
getAcceptableTokens()
The configurable token set.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
private void |
leave(DetailAST ast)
Checks number of return statements and restore previous context.
|
void |
leaveToken(DetailAST ast)
Called after all the child nodes have been process.
|
void |
setFormat(java.util.regex.Pattern pattern)
Set the format for the specified regular expression.
|
void |
setMax(int max)
Setter for max property.
|
void |
setMaxForVoid(int maxForVoid)
Setter for maxForVoid property.
|
private void |
visitLambda()
Creates new lambda context and places old one on the stack.
|
private void |
visitMethodDef(DetailAST ast)
Creates new method context and places old one on the stack.
|
private void |
visitReturn(DetailAST ast)
Examines the return statement and tells context about it.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
destroy, finishTree, getClassLoader, getFileContents, getLine, getLines, getTabWidth, getTokenNames, init, isCommentNodesRequired, log, log, setClassLoader, setFileContents, setMessages, setTabWidth, setTokens
getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, log, setId, setSeverity
configure, contextualize, finishLocalSetup, getConfiguration, setupChild
public static final java.lang.String MSG_KEY
private final java.util.Deque<ReturnCountCheck.Context> contextStack
private java.util.regex.Pattern format
private int max
private int maxForVoid
private ReturnCountCheck.Context context
public int[] getDefaultTokens()
AbstractCheck
getDefaultTokens
in class AbstractCheck
TokenTypes
public int[] getRequiredTokens()
AbstractCheck
getRequiredTokens
in class AbstractCheck
TokenTypes
public int[] getAcceptableTokens()
AbstractCheck
getAcceptableTokens
in class AbstractCheck
TokenTypes
public void setFormat(java.util.regex.Pattern pattern)
pattern
- a pattern.public void setMax(int max)
max
- maximum allowed number of return statements.public void setMaxForVoid(int maxForVoid)
maxForVoid
- maximum allowed number of return statements for void methods.public void beginTree(DetailAST rootAST)
AbstractCheck
beginTree
in class AbstractCheck
rootAST
- the root of the treepublic void visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- the token to processpublic void leaveToken(DetailAST ast)
AbstractCheck
leaveToken
in class AbstractCheck
ast
- the token leavingprivate void visitMethodDef(DetailAST ast)
ast
- method definition for check.private void leave(DetailAST ast)
ast
- node to leave.private void visitLambda()
private void visitReturn(DetailAST ast)
ast
- return statement to check.