親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.coding.ArrayTrailingCommaCheck |
Since | 3.2 |
配列を初期化するときに、各配列要素の後ろにカンマを付けているかをチェックします。例外として、配列要素が同一行で中括弧で囲われている場合は除きます。
Rationale: カンマを付けることによって、配列要素の順番を変えたり追加したりするのが簡単になります。
<module name = "ArrayTrailingComma" />
<module name = "ArrayTrailingComma" />
としたとき、以下のようになります。
OK! int[] numbers = new int[] { 1, 2, 3, }; Boo! int[] numbers = new int[] { 1, 2 }; OK! int[] numbers = new int[] { 0, 1 };
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.AvoidInlineConditionalsCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.AvoidInlineConditionalsCheck(3.2) |
Since | 3.1 |
条件演算子(?:)があるかをチェックします。
Rationale: 開発者の中には、条件演算子は読みにくい人もいる。そのため、会社のコーディング規約で禁止されることもある。
<module name = "AvoidInlineConditionals" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.AvoidInlineConditionalsCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.coding.CovariantEqualsCheck |
Since | 3.2 |
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.DoubleCheckedLockingCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.DoubleCheckedLockingCheck(3.2) |
Since | 3.1 |
Double-checked Locking Idiom を使っていないかをチェックします。 これに関する詳細は、http://www-6.ibm.com/jp/developerworks/java/020726/j_j-dcl.html を。
<module name = "DoubleCheckedLocking" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.DoubleCheckedLockingCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.EmptyStatementCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.EmptyStatementCheck(3.2) |
Since | 3.2 |
空文(; のみの文)をチェックします。
<module name = "EmptyStatement" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.EmptyStatementCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.EqualHashCodeCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.EqualHashCodeCheck(3.2) |
equals(), hashCode() メソッドをきちんとオーバーライドしているかをチェックします。
Rationale: equals() と hashCode() を実装することは、等価なオブジェクトは同じハッシュコードを持つために必要です。それゆえ、equals()をオーバーライドするときはいつでも、hashCode() をオーバーライドすることによって、ハッシュを基としたコレクションでの動作を確実なものにすることができます。
<module name = "EqualHashCode" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.EqualHashCodeCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.HiddenFieldCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.HiddenFieldCheck(3.2) |
ローカル変数やメソッドの引数が、フィールドと同じ名前をつけているかをチェックします。
プロパティ名 | 型 | デフォルト | 概要 |
tokens | PARAMETER_DEF, VARIABLE_DEF | すべて | チェック対象を選択 |
<module name = "HiddenFieldCheck"> <property name = "tokens" value = "PARAMETER_DEF" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.HiddenFieldCheck" severity = "warning"> <config-properties> <config-property name = "option" value = "PARAMETER_DEF" /> </config-properties> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.IllegalInstantiationCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.IllegalInstantiationCheck(3.2) |
ファクトリを使ってインスタンスを生成すべきところで、コンストラクタを使っている部分をチェックします。
Rationale: 幾つかのクラスでは、コンストラクタではなくファクトリメソッドを使ってインスタンスを生成するほうが良い場合がある。簡単な例に、java.lang.Boolean がある。このクラスでは、メモリや CPU をけちるために既に定義済みの定数 TRUE 及び FALSE の利用が好まれる。コンストラクタ呼び出しは、Boolean.valueOf() に置き換えることができる。
パフォーマンスを要求されるプロジェクトでは、他のクラスでもファクトリメソッドを使う必要がある。これによって、オブジェクトプールやキャッシュの仕組みを使った制御が可能になる。
<module name = "IllegalInstantiation"> <property name = "classes" value = "java.lang.Boolean" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.IllegalInstantiationCheck" severity = "warning"> <config-properties> <config-property name = "classes" value = "java.lang.Boolean" /> </config-properties> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.InnerAssignmentCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.InnerAssignmentCheck(3.2) |
式の内側での代入文があるかをチェックします。具体的には、
String s = Integer.toString(i = 2);
のようなもの("i = 2" の部分)をチェックします。
Rationale: for 文は例外として、すべての代入は式のトップレベルで行い読みやすくするべきである。上記の例のように式の内側で代入をしていると、値を設定している部分を見ることが難しくなる。
プロパティ名 | 型 | デフォルト | 概要 |
tokens | ASSIGN, BAND_ASSIGN, BOR_ASSIGN, BSR_ASSIGN, BXORASSIGN, DIV_ASSIGN, MINUS_ASSIGN, MOD_ASSIGN, PLUS_ASSIGN, SL_ASSIGN, SR_ASSIGN, STAR_ASSIGN | すべて | チェック対象を選択 |
<module name = "IllegalAssignment"> <property name = "tokens" value = "ASSIGN" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.IllegalAssignmentCheck" severity = "warning"> <config-properties> <config-property name = "tokens" value = "ASSIGN" /> </config-properties> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.MagicNumberCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck(3.2) |
Since | 3.1 |
マジックナンバーがないことをチェックします。マジックナンバーとは、ソースにべた書きされた数値のことです。ぱっと見はただの数値だが、なんかしらの意味を与えられているものを指します。
ここでは、定数定義以外で使われている数値に関してチェックされます。
プロパティ名 | 型 | デフォルト | 概要 |
tokens | NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG | すべて | チェック対象を選択 |
ignoreNumbers | Integer Set | -1, 0, 1, 2 | マジックナンバーとしてみなさない数字 |
<module name = "MagicNumber"> <property name = "tokens" value = "NUM_INT" /> <property name = "ignoreNumbers" value = "-1, 0, 1" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.MagicNumberCheck" severity = "warning"> <config-properties> <config-property name = "tokens" value = "NUM_INT" /> <config-property name = "ignoreNumbers" value = "-1, 0, 1" /> </config-properties> </rule-configuration>
<module name = "MagicNumber"> <property name = "tokens" value = "NUM_INT" /> <property name = "ignoreNumbers" value = "-1, 0, 1" /> </module>
としたとき、次のようになります。
OK! private static final int MAX = 1000; Boo! private int MAX = 1000; Boo! private static final int MAX = 100 * 10;
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.MissingSwitchDefaultCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.MissingSwitchDefaultCheck(3.2) |
Since | 3.1 |
switch 文に default ラベルがあるかをチェックします。
Rationale: すべての switch 文に default: を用意するのはよいアイデアです。開発者が、現状のすべての可能性のあるケースに対応できると確信していたとしても、default: を用意するべきである(例えば、アサーションとして利用する)。この方法は、コードの将来的な変更に対する備えとなる(例えば、Enum に新しいタイプを導入するとき)。
<module name = "MissingSwitchDefault" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.MissingSwitchDefaultCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.RedundantThrowsCheck(3.1) com.puppycrawl.tools.checkstyle.checks.coding.RedundantThrowsCheck(3.2) |
Since | 3.1 |
throws 句の冗長な例外の宣言をチェックします。例えば、重複していたり、未チェック例外が入っていたり、既に宣言した例外のサブクラスなどです。
<module name = "RedundantThrows"> <property name = "allowUnchecked" value = "true" /> <property name = "allowSubclasses" value = "true" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.RedundantThrowsCheck" severity = "warning"> <config-properties> <config-property name = "allowUnchecked" value = "true" /> <config-property name = "allowSubclasses" value = "true" /> </config-properties> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.SimplifyBooleanExpressionCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanExpressionCheck(3.2) |
過度に複雑な論理演算式をチェックします。現在は、if (b == true) とか、b || true, !false などをチェックします。
Rationale: 複雑な論理演算は、コードの理解を難しくし維持するのが困難になります。
<module name = "SimplifyBooleanExpression" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.SimplifyBooealnExpressionCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.SimplifyBooleanReturnCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanReturnCheck(3.2) |
boolean 型を返す return 文が過度に複雑であるかをチェックします。例えば、
if (valid()) return false; else return true;
は、
return !valid();
としなさいよというチェックです。このルールは、PMD の真似らしいです。
<module name = "SimplifyBooleanReturn" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.SimplifyBooealnReturnCheck" severity = "warning"> <config-properties /> </rule-configuration>