Fixed TODO need to handle LITERAL_SWITCH #235
This commit is contained in:
parent
daf8230919
commit
a0012d03eb
|
|
@ -35,7 +35,8 @@ import com.puppycrawl.tools.checkstyle.checks.AbstractOptionCheck;
|
|||
* {@link TokenTypes#LITERAL_IF LITERAL_IF},
|
||||
* {@link TokenTypes#LITERAL_ELSE LITERAL_ELSE},
|
||||
* {@link TokenTypes#LITERAL_FOR LITERAL_FOR},
|
||||
* {@link TokenTypes#STATIC_INIT STATIC_INIT}.
|
||||
* {@link TokenTypes#STATIC_INIT STATIC_INIT},
|
||||
* {@link TokenTypes#LITERAL_SWITCH LITERAL_SWITCH}.
|
||||
* </p>
|
||||
*
|
||||
* <p> An example of how to configure the check is:
|
||||
|
|
@ -82,8 +83,7 @@ public class EmptyBlockCheck
|
|||
TokenTypes.LITERAL_FOR,
|
||||
TokenTypes.INSTANCE_INIT,
|
||||
TokenTypes.STATIC_INIT,
|
||||
// TODO: need to handle....
|
||||
//TokenTypes.LITERAL_SWITCH,
|
||||
TokenTypes.LITERAL_SWITCH,
|
||||
//TODO: does this handle TokenTypes.LITERAL_SYNCHRONIZED?
|
||||
};
|
||||
}
|
||||
|
|
@ -91,21 +91,30 @@ public class EmptyBlockCheck
|
|||
@Override
|
||||
public void visitToken(DetailAST aAST)
|
||||
{
|
||||
final DetailAST slistAST = aAST.findFirstToken(TokenTypes.SLIST);
|
||||
if (slistAST != null) {
|
||||
final DetailAST slistToken = aAST.findFirstToken(TokenTypes.SLIST);
|
||||
final DetailAST leftCurly = slistToken != null
|
||||
? slistToken : aAST.findFirstToken(TokenTypes.LCURLY);
|
||||
if (leftCurly != null) {
|
||||
if (getAbstractOption() == BlockOption.STMT) {
|
||||
if (slistAST.getChildCount() <= 1) {
|
||||
log(slistAST.getLineNo(),
|
||||
slistAST.getColumnNo(),
|
||||
boolean emptyBlock;
|
||||
if (leftCurly.getType() == TokenTypes.LCURLY) {
|
||||
emptyBlock = leftCurly.getNextSibling().getType() != TokenTypes.CASE_GROUP;
|
||||
}
|
||||
else {
|
||||
emptyBlock = leftCurly.getChildCount() <= 1;
|
||||
}
|
||||
if (emptyBlock) {
|
||||
log(leftCurly.getLineNo(),
|
||||
leftCurly.getColumnNo(),
|
||||
"block.noStmt",
|
||||
aAST.getText());
|
||||
}
|
||||
}
|
||||
else if (getAbstractOption() == BlockOption.TEXT
|
||||
&& !hasText(slistAST))
|
||||
&& !hasText(leftCurly))
|
||||
{
|
||||
log(slistAST.getLineNo(),
|
||||
slistAST.getColumnNo(),
|
||||
log(leftCurly.getLineNo(),
|
||||
leftCurly.getColumnNo(),
|
||||
"block.empty",
|
||||
aAST.getText());
|
||||
}
|
||||
|
|
@ -120,7 +129,9 @@ public class EmptyBlockCheck
|
|||
{
|
||||
boolean retVal = false;
|
||||
|
||||
final DetailAST rcurlyAST = aSlistAST.findFirstToken(TokenTypes.RCURLY);
|
||||
final DetailAST rightCurly = aSlistAST.findFirstToken(TokenTypes.RCURLY);
|
||||
final DetailAST rcurlyAST = rightCurly != null
|
||||
? rightCurly : aSlistAST.getParent().findFirstToken(TokenTypes.RCURLY);
|
||||
if (rcurlyAST != null) {
|
||||
final int slistLineNo = aSlistAST.getLineNo();
|
||||
final int slistColNo = aSlistAST.getColumnNo();
|
||||
|
|
|
|||
|
|
@ -95,11 +95,30 @@ public class EmptyBlockCheckTest
|
|||
checkConfig.addAttribute("option", BlockOption.STMT.toString());
|
||||
checkConfig.addAttribute("tokens", "LITERAL_TRY, LITERAL_CATCH,"
|
||||
+ "LITERAL_FINALLY, LITERAL_DO, LITERAL_IF,"
|
||||
+ "LITERAL_ELSE, INSTANCE_INIT, STATIC_INIT");
|
||||
+ "LITERAL_ELSE, INSTANCE_INIT, STATIC_INIT, LITERAL_SWITCH");
|
||||
final String[] expected = {
|
||||
"16:29: Must have at least one statement.",
|
||||
"19:42: Must have at least one statement.",
|
||||
"22:29: Must have at least one statement.",
|
||||
"23:28: Must have at least one statement.",
|
||||
};
|
||||
verify(checkConfig, getPath("InputSemantic2.java"), expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void allowEmptyLoopsText() throws Exception
|
||||
{
|
||||
final DefaultConfiguration checkConfig =
|
||||
createCheckConfig(EmptyBlockCheck.class);
|
||||
checkConfig.addAttribute("option", BlockOption.TEXT.toString());
|
||||
checkConfig.addAttribute("tokens", "LITERAL_TRY, LITERAL_CATCH,"
|
||||
+ "LITERAL_FINALLY, LITERAL_DO, LITERAL_IF,"
|
||||
+ "LITERAL_ELSE, INSTANCE_INIT, STATIC_INIT, LITERAL_SWITCH");
|
||||
final String[] expected = {
|
||||
"16:29: Empty if block.",
|
||||
"19:42: Empty if block.",
|
||||
"22:29: Empty if block.",
|
||||
"23:28: Empty switch block.",
|
||||
};
|
||||
verify(checkConfig, getPath("InputSemantic2.java"), expected);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,15 @@ class UpdateClass
|
|||
while ((r = in.read()) != 0) {} // is OK
|
||||
for (; index < s.length && s[index] != 'x'; index++) {} // is OK
|
||||
if (a == 1) {} else {System.out.println("a");} // is not OK
|
||||
switch (a) {} //warn
|
||||
switch (a) { //ok
|
||||
case 1:
|
||||
a = 2;
|
||||
case 2:
|
||||
a = 3;
|
||||
default:
|
||||
a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int doSideEffect()
|
||||
|
|
|
|||
|
|
@ -52,9 +52,11 @@
|
|||
<a
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#LITERAL_WHILE">LITERAL_WHILE</a>,
|
||||
<a
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#INSTANCE_INIT">INSTANCE_INIT</a>
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#INSTANCE_INIT">INSTANCE_INIT</a>,
|
||||
<a
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#STATIC_INIT">STATIC_INIT</a>
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#STATIC_INIT">STATIC_INIT</a>,
|
||||
<a
|
||||
href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#LITERAL_SWITCH">LITERAL_SWITCH</a>.
|
||||
</td>
|
||||
|
||||
<td>all tokens</td>
|
||||
|
|
|
|||
Loading…
Reference in New Issue