public class RightCurlyCheck extends AbstractCheck
Checks the placement of right curly braces (''}) for code blocks. This check supports
if-else, try-catch-finally blocks, while-loops, for-loops,
method definitions, class definitions, constructor definitions,
instance, static initialization blocks, annotation definitions and enum definitions.
For right curly brace of expression blocks of arrays, lambdas and class instances
please follow issue
#5945.
For right curly brace of enum constant please follow issue
#7519.
option - Specify the policy on placement of a right curly brace
('}').
Type is com.puppycrawl.tools.checkstyle.checks.blocks.RightCurlyOption.
Default value is same.
tokens - tokens to check
Type is java.lang.String[].
Validation type is tokenSet.
Default value is:
LITERAL_TRY,
LITERAL_CATCH,
LITERAL_FINALLY,
LITERAL_IF,
LITERAL_ELSE.
To configure the check:
<module name="RightCurly"/>
Example:
public class Test {
public void test() {
if (foo) {
bar();
} // violation, right curly must be in the same line as the 'else' keyword
else {
bar();
}
if (foo) {
bar();
} else { // OK
bar();
}
if (foo) { bar(); } int i = 0; // violation
// ^^^ statement is not allowed on same line after curly right brace
if (foo) { bar(); } // OK
int i = 0;
try {
bar();
} // violation, rightCurly must be in the same line as 'catch' keyword
catch (Exception e) {
bar();
}
try {
bar();
} catch (Exception e) { // OK
bar();
}
} // OK
public void testSingleLine() { bar(); } // OK, because singleline is allowed
}
To configure the check with policy alone for else and
METHOD_DEF tokens:
<module name="RightCurly"> <property name="option" value="alone"/> <property name="tokens" value="LITERAL_ELSE, METHOD_DEF"/> </module>
Example:
public class Test {
public void test() {
if (foo) {
bar();
} else { bar(); } // violation, right curly must be alone on line
if (foo) {
bar();
} else {
bar();
} // OK
try {
bar();
} catch (Exception e) { // OK because config is set to token METHOD_DEF and LITERAL_ELSE
bar();
}
} // OK
public void violate() { bar; } // violation, singleline is not allowed here
public void ok() {
bar();
} // OK
}
To configure the check with policy alone_or_singleline for if and
METHOD_DEF
tokens:
<module name="RightCurly"> <property name="option" value="alone_or_singleline"/> <property name="tokens" value="LITERAL_IF, METHOD_DEF"/> </module>
Example:
public class Test {
public void test() {
if (foo) {
bar();
} else { // violation, right curly must be alone on line
bar();
}
if (foo) {
bar();
} // OK
else {
bar();
}
try {
bar();
} catch (Exception e) { // OK because config did not set token LITERAL_TRY
bar();
}
} // OK
public void violate() { bar(); } // OK , because singleline
}
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
line.alone
line.break.before
line.same
| Modifier and Type | Class and Description |
|---|---|
private static class |
RightCurlyCheck.Details
Structure that contains all details for validation.
|
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
MSG_KEY_LINE_ALONE
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_KEY_LINE_BREAK_BEFORE
A key is pointing to the warning message text in "messages.properties"
file.
|
static java.lang.String |
MSG_KEY_LINE_SAME
A key is pointing to the warning message text in "messages.properties"
file.
|
private RightCurlyOption |
option
Specify the policy on placement of a right curly brace (
'}'). |
| Constructor and Description |
|---|
RightCurlyCheck() |
| Modifier and Type | Method and Description |
|---|---|
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 static boolean |
hasLineBreakBefore(DetailAST rightCurly)
Checks if right curly has line break before.
|
private static boolean |
isAloneOnLine(RightCurlyCheck.Details details,
java.lang.String targetSrcLine)
Checks whether right curly is alone on a line.
|
private static boolean |
isBlockAloneOnSingleLine(RightCurlyCheck.Details details)
Checks whether block has a single-line format and is alone on a line.
|
private static boolean |
isRightcurlyFollowedBySemicolon(RightCurlyCheck.Details details)
Checks whether the right curly is followed by a semicolon.
|
void |
setOption(java.lang.String optionStr)
Setter to specify the policy on placement of a right curly brace (
'}'). |
private static boolean |
shouldBeAloneOnLine(RightCurlyOption bracePolicy,
RightCurlyCheck.Details details,
java.lang.String targetSrcLine)
Checks that a right curly should be alone on a line.
|
private static boolean |
shouldBeAloneOnLineWithAloneOption(RightCurlyCheck.Details details,
java.lang.String targetSrcLine)
Whether right curly should be alone on line when ALONE option is used.
|
private static boolean |
shouldBeAloneOnLineWithNotAloneOption(RightCurlyCheck.Details details,
java.lang.String targetSrcLine)
Whether right curly should be alone on line when ALONE_OR_SINGLELINE or SAME option is used.
|
private static boolean |
shouldBeOnSameLine(RightCurlyOption bracePolicy,
RightCurlyCheck.Details details)
Checks that a right curly should be on the same line as the next statement.
|
private static boolean |
shouldHaveLineBreakBefore(RightCurlyOption bracePolicy,
RightCurlyCheck.Details details)
Checks whether a right curly should have a line break before.
|
private static boolean |
skipDoubleBraceInstInit(RightCurlyCheck.Details details)
This method determines if the double brace initialization should be skipped over by the
check.
|
private java.lang.String |
validate(RightCurlyCheck.Details details)
Does general validation.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
beginTree, clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final java.lang.String MSG_KEY_LINE_BREAK_BEFORE
public static final java.lang.String MSG_KEY_LINE_ALONE
public static final java.lang.String MSG_KEY_LINE_SAME
private RightCurlyOption option
'}').public RightCurlyCheck()
public void setOption(java.lang.String optionStr)
'}').optionStr - string to decode option fromjava.lang.IllegalArgumentException - if unable to decodepublic int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processprivate java.lang.String validate(RightCurlyCheck.Details details)
details - for validation.private static boolean shouldHaveLineBreakBefore(RightCurlyOption bracePolicy, RightCurlyCheck.Details details)
bracePolicy - option for placing the right curly brace.details - details for validation.private static boolean shouldBeOnSameLine(RightCurlyOption bracePolicy, RightCurlyCheck.Details details)
bracePolicy - option for placing the right curly bracedetails - Details for validationprivate static boolean shouldBeAloneOnLine(RightCurlyOption bracePolicy, RightCurlyCheck.Details details, java.lang.String targetSrcLine)
bracePolicy - option for placing the right curly bracedetails - Details for validationtargetSrcLine - A string with contents of rcurly's lineprivate static boolean shouldBeAloneOnLineWithAloneOption(RightCurlyCheck.Details details, java.lang.String targetSrcLine)
details - details for validation.targetSrcLine - A string with contents of rcurly's lineprivate static boolean shouldBeAloneOnLineWithNotAloneOption(RightCurlyCheck.Details details, java.lang.String targetSrcLine)
details - details for validation.targetSrcLine - A string with contents of rcurly's lineprivate static boolean isAloneOnLine(RightCurlyCheck.Details details, java.lang.String targetSrcLine)
details - for validation.targetSrcLine - A string with contents of rcurly's lineprivate static boolean skipDoubleBraceInstInit(RightCurlyCheck.Details details)
Map<String, String> map = new LinkedHashMap<>() {{
put("alpha", "man");
}}; // no violation
details - RightCurlyCheck.Details object containing the details relevant to the rcurlyprivate static boolean isBlockAloneOnSingleLine(RightCurlyCheck.Details details)
details - for validation.private static boolean isRightcurlyFollowedBySemicolon(RightCurlyCheck.Details details)
details - details for validation.private static boolean hasLineBreakBefore(DetailAST rightCurly)
rightCurly - right curly token.Copyright © 2001-2022. All Rights Reserved.