Checks that array initialization contains a trailing comma.
The check allows leaving out the comma at the end if both the left and right curly brackets are on the same line.
Rationale: Putting this comma in makes it easier to change the order of the elements or add new elements on the end.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Detects inline conditionals. Here is one example of an inline conditional:
Rationale: Some developers find inline conditionals hard to read, so their employer's coding standards forbid them.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that classes which define a covariant equals()
method
also override method equals(Object)
.
Covariant equals()
- method that is similar to equals(Object)
,
but with a covariant parameter type (any subtype of Object).
Notice: the enums are also checked, even
though they cannot override equals(Object)
. The reason is
to point out that implementing equals()
in enums is considered an
awful practice: it may cause having two different enum values that are equal using
covariant enum method, and not equal when compared normally.
Inspired by Finding Bugs is Easy, chapter '2.3.1 Bad Covariant Definition of Equals (Eq)':
Java classes may override the equals(Object)
method to define
a predicate for object equality. This method is used by many of the Java runtime
library classes; for example, to implement generic containers.
Programmers sometimes mistakenly use the type of their class Foo
as the type of the parameter to equals()
:
This covariant version of equals()
does not override the version in the
Object
class, and it may lead to unexpected behavior at runtime,
especially if the class is used with one of the standard collection classes
which expect that the standard equals(Object)
method is overridden.
This kind of bug is not obvious because it looks correct, and in circumstances where the class is accessed through the references of the class type (rather than a supertype), it will work correctly. However, the first time it is used in a container, the behavior might be mysterious. For these reasons, this type of bug can elude testing and code inspections.
To configure the check:
For example:
The same class without violations:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
According to Code Conventions for the Java Programming Language , the parts of a class or interface declaration should appear in the following order:
Purpose of ignore* option is to ignore related violations, however it still impacts on other class members.
ATTENTION: the check skips class fields which have
forward references
from validation due to the fact that we have Checkstyle's limitations to clearly
detect user intention of fields location and grouping. For example,
name | description | type | default value |
---|---|---|---|
ignoreConstructors | whether to ignore constructors | Boolean | false |
ignoreModifiers | whether to ignore modifiers | Boolean | false |
To configure the check:
For example:
With ignoreConstructors option:
With ignoreConstructors option and without a method definition in a source class:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Check that the default
is after all the
case
s in a switch
statement.
Rationale: Java allows default
anywhere
within the switch
statement. But it is
more readable if it comes after the last case
.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Detects empty statements (standalone ";" semicolon).
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that any combination of String literals
is on the left side of an equals() comparison.
Also checks for String literals assigned to some field
(such as someString.equals(anotherString = "text")
).
Rationale: Calling the equals()
method on String literals will avoid a potential
NullPointerException. Also, it is pretty common to see null
checks right before equals comparisons, which is not necessary
in the example below.
For example, this code:
should be refactored to:
name | description | type | default value |
---|---|---|---|
ignoreEqualsIgnoreCase | whether to ignore String.equalsIgnoreCase() invocations |
Boolean | false |
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that classes that override equals()
also override hashCode()
.
Rationale: The contract of equals()
and
hashCode()
requires that equal objects
have the same hashCode. Therefore, whenever you override equals()
you must override
hashCode()
to ensure that your class can be used in
hash-based collections.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks if any class or object member is explicitly initialized to
default for its type value (null
for
object references, zero for numeric types and char
and false
for
boolean
.
Rationale: Each instance variable gets initialized twice, to the same value. Java initializes each instance variable to its default value (0 or null) before performing any initialization specified in the code. So in this case, x gets initialized to 0 twice, and bar gets initialized to null twice. So there is a minor inefficiency. This style of coding is a holdover from C/C++ style coding, and it shows that the developer isn't really confident that Java initializes instance variables to default values.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for fall-through in switch
statements. Finds locations where a case
contains Java code but lacks a break
, return
,
throw
or continue
statement.
The check honors special comments to suppress the warning. By
default the text "fallthru", "fall through", "fallthrough",
"falls through" and "fallsthrough" are recognized (case
sensitive). The comment containing these words must be all on one line, and must
be on the last non-empty line before the
case
triggering the warning or on
the same line before the case
(ugly, but possible).
Note: The check assumes that there is no unreachable
code in the case
.
name | description | type | default value |
---|---|---|---|
checkLastCaseGroup | Whether the last case group must be checked. | Boolean | false |
reliefPattern | Regular expression to match the relief comment that suppresses the warning about a fall through. | regular expression | fallthru|falls? ?through |
To configure the check:
or
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that local variables that never have their values changed are declared final. The check can be configured to also check that unchanged parameters are declared final.
When configured to check parameters, the check ignores parameters of interface methods and abstract methods.
name | description | type | default value |
---|---|---|---|
validateEnhancedForLoopVariable | Controls whether to check enhanced for-loop variable. | Boolean |
false
|
tokens | tokens to check | subset of tokens VARIABLE_DEF, PARAMETER_DEF. | VARIABLE_DEF. |
To configure the check:
To configure the check so that it checks local variables and parameters:
By default, this Check skip final validation on Enhanced For-Loop.
Option 'validateEnhancedForLoopVariable' could be used to make Check to validate even variable from Enhanced For Loop.
An example of how to configure the check so that it also validates enhanced For Loop Variable is:
Example:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that a local variable or a parameter does not shadow a field that is defined in the same class.
name | description | type | default value |
---|---|---|---|
ignoreFormat | pattern for names of variables and parameters to ignore | regular expression | (not applied) |
ignoreConstructorParameter | Controls whether to ignore constructor parameters. | Boolean | false |
ignoreSetter |
Controls whether to ignore the parameter of a property setter
method, where the property setter method for field
"xyz" has name "setXyz", one parameter named
"xyz" and return type of void
( default behavior) or class in which method is declared (only
if property setterCanReturnItsClass is set
to true ).
|
Boolean | false |
setterCanReturnItsClass |
Used in conjunction with ignoreSetter property it
controls rule that recognizes method as a setter. By default
setter is a method with signature of type
void setXyz(${someType} xyz)By setting this property ( setterCanReturnItsClass )
to true we expand definition of setter to also
include returning class in which setter is defined. For example
class Foo { int prop; Foo setProp(int prop) { this.prop = prop; return this; } } |
Boolean | false |
ignoreAbstractMethods | Controls whether to ignore parameters of abstract methods. | Boolean | false |
tokens | tokens to check | subset of tokens VARIABLE_DEF, PARAMETER_DEF, LAMBDA. | VARIABLE_DEF, PARAMETER_DEF, LAMBDA. |
To configure the check:
To configure the check so that it checks local variables but not parameters:
To configure the check so that it ignores the variables and parameters named "test":
To configure the check so that it ignores constructor parameters:
To configure the check so that it ignores the parameter of setter methods:
To configure the check so that it ignores the parameter of setter
methods recognizing setter as returning either void
or
a class in which it is declared:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that certain exception types do not appear in a catch
statement.
Rationale: Catching java.lang.Exception, java.lang.Error or java.lang.RuntimeException is almost never acceptable. Novice developers often simply catch Exception in an attempt to handle multiple exception classes. This unfortunately leads to code that inadvertently catches NullPointerException, OutOfMemoryError, etc.
name | description | type | default value |
---|---|---|---|
illegalClassNames | exception class names to reject | String Set | "java.lang.Exception,
java.lang.Throwable, java.lang.RuntimeException" |
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for illegal instantiations where a factory method is preferred.
Rationale: Depending on the project, for some classes it might be preferable to create instances through factory methods rather than calling the constructor.
A simple example is the java.lang.Boolean
class. For performance reasons, it is preferable to
use the predefined constants TRUE
and
FALSE
. Constructor invocations should be
replaced by calls to Boolean.valueOf()
.
Some extremely performance sensitive projects may require the use of factory methods for other classes as well, to enforce the usage of number caches or object pools.
There is a limitation that it is currently not possible to specify array classes.
name | description | type | default value |
---|---|---|---|
classes | classes that should not be instantiated | String Set | {} |
tokens | tokens to check | subset of tokens CLASS_DEF. | CLASS_DEF. |
To configure the check to find instantiations of java.lang.Boolean:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
This check can be used to ensure that types are not declared to be thrown. Declaring that a method throws java.lang.Error or java.lang.RuntimeException is almost never acceptable.
name | description | type | default value |
---|---|---|---|
illegalClassNames | throw class names to reject | String Set |
"java.lang.Throwable,
java.lang.Error, java.lang.RuntimeException"
|
ignoredMethodNames | names of methods to ignore | String Set | finalize |
ignoreOverriddenMethods | ignore checking overridden methods (marked with Override or java.lang.Override annotation). | Boolean | true |
To configure the check:
To configure the check rejecting throws NullPointerException from methods:
To configure the check ignoring method named "foo()":
To configure the check to warn on overridden methods:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for illegal tokens. By default labels are prohibited.
Rationale: Certain language features can harm readability, lead to confusion or are not obvious to novice developers. Other features may be discouraged in certain frameworks, such as not having native methods in Enterprise JavaBeans components.
name | description | type | default value |
---|---|---|---|
tokens | tokens to check | subset of tokens TokenTypes. | LABELED_STAT. |
To configure the check to find token LITERAL_NATIVE:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for illegal token text.
name | description | type | default value |
---|---|---|---|
format | illegal pattern | regular expression | ^$ (empty) |
ignoreCase | Controls whether to ignore case when matching. | Boolean | false |
message | Message which is used to notify about violations; if empty then the default message is used. | String | "" (empty) |
tokens | tokens to check | subset of tokens TokenTypes. | empty |
To configure the check to forbid String literals containing "a href"
:
To configure the check to forbid leading zeros in an integer literal, other than zero and a hex literal:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that particular classes are never used as types in variable declarations, return values or parameters.
Rationale: Helps reduce coupling on concrete classes.
name | description | type | default value |
---|---|---|---|
validateAbstractClassNames | Whether to validate abstract class names | Boolean | false |
illegalClassNames | Classes that should not be used as types in variable declarations, return values or parameters | String Set | "java.util.HashSet, java.util.HashMap, java.util.LinkedHashMap, java.util.LinkedHashSet, java.util.TreeSet, java.util.TreeMap" |
legalAbstractClassNames | Abstract classes that may be used as types. | String Set | |
ignoredMethodNames | Methods that should not be checked. | String Set | "getInitialContext, getEnvironment" |
format | Pattern for illegal class names. | regular expression | ^(.*[\\.])?Abstract.*$ |
memberModifiers | Check methods and fields with only corresponding modifiers. | List of tokens | null |
tokens | tokens to check | subset of tokens VARIABLE_DEF, PARAMETER_DEF, METHOD_DEF. | VARIABLE_DEF, PARAMETER_DEF, METHOD_DEF. |
To configure the check so that it ignores getInstance() methods:
To configure the Check so that it verifies only public, protected and static methods and fields:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for assignments in subexpressions, such as in String s = Integer.toString(i = 2);
.
Rationale: With the exception of for
iterators and assignment in
while
idiom, all assignments should occur in their own top-level statement
to increase readability. With inner assignments like the one given above, it is difficult
to see all places where a variable is set.
Note: Check allows usage of the popular assignment in while
idiom:
!= null
and there is no
chance that intention was to write line == reader.readLine()
.
To configure the check:
To configure the check for only =
, +=
, and -=
operators:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that there are no "magic numbers" where a magic number is a numeric literal that is not defined as a constant. By default, -1, 0, 1, and 2 are not considered to be magic numbers.
It is fine to have one constant defining multiple numeric literals within one expression:
name | description | type | default value |
---|---|---|---|
ignoreNumbers | non-magic numbers | Number Set | -1, 0, 1, 2 |
ignoreHashCodeMethod | ignore magic numbers in hashCode methods | Boolean | false |
ignoreAnnotation | ignore magic numbers in annotation declarations. | Boolean | false |
ignoreFieldDeclaration | ignore magic numbers in field declarations. | Boolean | false |
constantWaiverParentToken | Token that are allowed in the AST path from the number literal to the enclosing constant definition. | subset of tokens TokenTypes | ASSIGN, ARRAY_INIT, EXPR, UNARY_PLUS, UNARY_MINUS, TYPECAST, ELIST, LITERAL_NEW, METHOD_CALL, STAR, DIV, PLUS, MINUS. |
tokens | tokens to check | subset of tokens NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG. | NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG. |
To configure the check with default configuration:
results is following violations:
To configure the check so that it checks floating-point numbers that are not 0, 0.5, or 1:
results is following violations:
Config Example for constantWaiverParentToken Option:
result is following violation:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that classes (except abstract ones) define a constructor and don't rely on the default one.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that switch statement has a "default" clause.
Rationale: It's usually a good idea to introduce a default case in every switch statement. Even if the developer is sure that all currently possible cases are covered, this should be expressed in the default branch, e.g. by using an assertion. This way the code is protected against later changes, e.g. introduction of new types in an enumeration type.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Check for ensuring that for loop control variables are not modified inside the for block. An example is:
Rationale: If the control variable is modified inside the loop
body, the program flow becomes more difficult to follow.
See FOR statement specification for more details.
Such loop would be suppressed:
name | description | type | default value |
---|---|---|---|
skipEnhancedForLoopVariable | Controls whether to check enhanced for-loop variable. | Boolean |
false
|
To configure the check:
By default, This Check validates Enhanced For-Loop.
Option 'skipEnhancedForLoopVariable' could be used to skip check of variable from Enhanced For Loop.
An example of how to configure the check so that it skips enhanced For Loop Variable is:
Example:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for multiple occurrences of the same string literal within a single file.
Rationale: Code duplication makes maintenance more difficult, so it can be better to replace the multiple occurrences with a constant.
name | description | type | default value |
---|---|---|---|
allowedDuplicates | The maximum number of occurrences to allow without generating a warning | Integer | 1 |
ignoreStringsRegexp | Regular expression pattern for ignored strings (with quotation marks) | regular expression | ^""$ (ignore empty strings) |
ignoreOccurrenceContext | Token type names where duplicate strings are ignored even if they don't match ignoredStringsRegexp. This allows you to exclude syntactical contexts like annotations or static initializers from the check. | subset of tokens TokenTypes |
ANNOTATION
(ignore strings inside the context of an annotation)
|
To configure the check:
To configure the check so that it allows two occurrences of each string:
To configure the check so that it ignores ", " and empty strings:
To configure the check so that it flags duplicate strings in all
syntactical contexts, even in annotations like
@SuppressWarnings("unchecked")
:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that each variable declaration is in its own statement and on its own line.
Rationale: the Java code conventions chapter 6.1 recommends that declarations should be one per line/statement.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Restricts nested for
blocks to a specified depth
(default = 1).
name | description | type | default value |
---|---|---|---|
max | allowed nesting depth | Integer | 1 |
To configure the check:
To configure the check to allow nesting depth 3:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Restricts nested if-else blocks to a specified depth (default = 1).
name | description | type | default value |
---|---|---|---|
max | allowed nesting depth | Integer | 1 |
To configure the check:
To configure the check to allow nesting depth 3:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Restricts nested try blocks to a specified depth (default = 1).
name | description | type | default value |
---|---|---|---|
max | allowed nesting depth | Integer | 1 |
To configure the check:
To configure the check to allow nesting depth 3:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that the clone method is not overridden from the Object class.
Rationale: The clone method relies on strange, hard to follow rules that are difficult to get right and do not work in all situations. In some cases, either a copy constructor or a static factory method can be used instead of the clone method to return copies of an object. For more information on rules for the clone method and its issues, see Effective Java: Programming Language Guide First Edition by Joshua Bloch pages 45-52.
This check is almost exactly the same as the {@link NoFinalizerCheck}
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Verifies there are no finalize()
methods
defined in a class.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that there is only one statement per line.
Rationale: It's very difficult to read multiple statements on one line.
In the Java programming language, statements are the fundamental unit of execution. All statements except blocks are terminated by a semicolon. Blocks are denoted by open and close curly braces.
OneStatementPerLineCheck checks the following types of statements: variable declaration statements, empty statements, import statements, assignment statements, expression statements, increment statements, object creation statements, 'for loop' statements, 'break' statements, 'continue' statements, 'return' statements.
The following examples will be flagged as a violation:
An example of how to configure this Check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that overload methods are grouped together.
Example of incorrect grouping overload methods:
An example of how to configure the check is:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Ensures that a class has a package declaration, and (optionally) whether the package name matches the directory name for the source file.
Rationale: Classes that live in the null package cannot be imported. Many novice developers are not aware of this.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Disallows assignment of parameters.
Rationale: Parameter assignment is often considered poor programming practice. Forcing developers to declare parameters as final is often onerous. Having a check ensure that parameters are never assigned would give the best of both worlds.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that references to instance variables and methods of the present object are explicitly of the form "this.varName" or "this.methodName(args)" and that those references don't rely on the default behavior when "this." is absent.
Warning: the Check is very controversial if 'validateOnlyOverlapping' option is set to 'false' and not that actual nowadays.
Rationale:
name | description | type | default value |
---|---|---|---|
checkFields | Whether to check references to fields. | Boolean | true |
checkMethods | Whether to check references to methods. | Boolean | true |
validateOnlyOverlapping | Whether to check only overlapping by variables or arguments. | Boolean | true |
To configure the default check:
To configure to check the this
qualifier for fields only:
Examples of how the check works if validateOnlyOverlapping option is set to true:
Please, be aware of the following logic, which is implemented in the check:
1) If you arranges 'this' in your code on your own, the check will not rise violation for variables which use 'this' to reference a class field, for example:
2) If method parameter is returned from the method, the check will not rise violation for returned variable/parameter, for example:
Examples of how the check works if validateOnlyOverlapping option is set to false:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
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 mean that code is attempting to do too much or may be difficult to understand.
name | description | type | default value |
---|---|---|---|
max | maximum allowed number of return statements in non-void methods/lambdas | Integer | 2 |
maxForVoid | maximum allowed number of return statements in void methods/constructors/lambdas | Integer | 1 |
format | method names to ignore | regular expression | ^equals$ (empty) |
tokens | tokens to check | subset of tokens CTOR_DEF, METHOD_DEF, LAMBDA. | CTOR_DEF, METHOD_DEF, LAMBDA. |
To configure the check so that it doesn't allow more than three
return statements per method (ignoring the equals()
method):
To configure the check so that it doesn't allow any return statements per void method:
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:
To configure the check so that it doesn't allow more than three return statements per method for all methods:
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:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for over-complicated boolean expressions. Currently finds
code like if (b == true)
, b || true
, !false
,
etc.
Rationale: Complex boolean logic makes code hard to understand and maintain.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for over-complicated boolean return statements. For example the following code
could be written as
The idea for this Check has been shamelessly stolen from the equivalent PMD rule.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that string literals are not used with ==
or
!=
.
Rationale: Novice Java programmers often use code like:
when they mean
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that an overriding clone()
method invokes
super.clone()
. Does not check native methods, as
they have no possible java defined implementation.
Reference: Object.clone().
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks that an overriding finalize()
method invokes
super.finalize()
. Does not check native methods, as
they have no possible java defined implementation.
Reference: Use Finalization Only When You Must.
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks for the use of unnecessary parentheses.
name | description | type | default value |
---|---|---|---|
tokens | tokens to check | subset of tokens EXPR, IDENT, NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG, STRING_LITERAL, LITERAL_NULL, LITERAL_FALSE, LITERAL_TRUE, ASSIGN, BAND_ASSIGN, BOR_ASSIGN, BSR_ASSIGN, BXOR_ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, MOD_ASSIGN, PLUS_ASSIGN, SL_ASSIGN, SR_ASSIGN, STAR_ASSIGN. | EXPR, IDENT, NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG, STRING_LITERAL, LITERAL_NULL, LITERAL_FALSE, LITERAL_TRUE, ASSIGN, BAND_ASSIGN, BOR_ASSIGN, BSR_ASSIGN, BXOR_ASSIGN, DIV_ASSIGN, MINUS_ASSIGN, MOD_ASSIGN, PLUS_ASSIGN, SL_ASSIGN, SR_ASSIGN, STAR_ASSIGN. |
To configure the check:
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding
Checks the distance between declaration of variable and its first usage.
name | description | type | default value |
---|---|---|---|
allowedDistance | A distance between declaration of variable and its first usage | Integer | 3 |
ignoreVariablePattern | pattern for ignoring the distance calculation | regular expression | (not applied) |
validateBetweenScopes | Allows to calculate the distance between declaration of variable and its first usage in the different scopes. | Boolean | false |
ignoreFinal | Allows to ignore variables with a 'final' modifier. | Boolean | true |
Example #1:
Example #2:
Check can detect a block of initialization methods. If a variable is used in such a block and there is no other statements after this variable then distance=1.
Case #1:
The distance for the variable minutes is 1 even though this variable is used in the fifth method's call.
Case #2:
The distance for the variable minutes is 6 because there is one more expression (except the initialization block) between the declaration of this variable and its usage.
An example how to configure this Check:
An example of how to configure this Check: - to set the allowed distance to 4; - to ignore variables with prefix '^temp'; - to force the validation between scopes; - to check the final variables;
ATTENTION!! (Not supported cases)
Distance for variable 'a' = 1; Distance for variable 'b' = 1; Distance for variable 'c' = 2.
As distance by default is 1 the Check doesn't raise warning for variables 'a' and 'b' to move them into the block.
Case #2:
Distance for variable 'sum' = 3.
As the distance is more then the default one, the Check raises warning for variable 'sum' to move it into the 'for(...)' block. But there is situation when variable 'sum' hasn't to be 0 within each iteration. So, to avoid such warnings you can use Suppression Filter, provided by Checkstyle, for the whole class.
All messages can be customized if the default message doesn't suite you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding