Standard Checks‎ > ‎

Block Checks


EmptyBlock

Description

空のブロックをチェックします。

Properties

namedescriptiontypedefault value
optionロックのポリシーblock policystmt
tokensチェックするブロックsubset of tokens LITERAL_CATCHLITERAL_DO
LITERAL_ELSELITERAL_FINALLY
LITERAL_IF,LITERAL_FOR
LITERAL_TRYLITERAL_WHILE
INSTANCE_INIT STATIC_INIT
all tokens

Samples

option stmt の場合


// NG

if (true) {

}

// NG

if (true) {

    // xxxx

}

// OK

if (true) {

    System.out.println();

}


option text の場合


// NG

if (true) {

}

// OK

if (true) {

    // xxxx

}

// OK

if (true) {

    System.out.println();

}


LeftCurly

Description

コードブロックの始め中括弧('{'の配置をチェックします。 検証するポリシーはプロパティ option で指定します。 ポリシー eol および nlow は、プロパティ maxLineLength を考慮に入れます。


Properties

namedescriptiontypedefault value
option始め中括弧('{')の配置に関するポリシーleft curly brace policyeol
maxLineLength1行の最大文字数integer80
tokensチェックするブロックsubset of tokens CLASS_DEFCTOR_DEF
INTERFACE_DEFLITERAL_CATCH
LITERAL_DO,LITERAL_ELSE
LITERAL_FINALLYLITERAL_FOR
LITERAL_IFLITERAL_SWITCH,
LITERAL_SYNCHRONIZEDLITERAL_TRY
LITERAL_WHILEMETHOD_DEF
all tokens


Samples

option eol の場合、括弧は常に行末にこなければなりません。


if (condition) {

    // xxx


option nl の場合、括弧は常に新しい行にこなければなりません。


if (condition) 

{

    // xxx


option nlow の場合、最大行長を考慮に入れた上で括弧がステートメントの最初の行にフィットする ならば、 eol ルールを適用します。そうでない場合はnl ルールを適用します。nlow  "new line on wrap" のニモニックです。


// 最大行数内の場合

if (condition) {

    // xxx

}


// 最大行数以上の場合

if (condition1 && condition2 &&

        condition3 && condition4)

{

    // xxx

}


NeedBraces

Description

コードブロックを囲む中括弧をチェックします。

Properties

namedescriptiontypedefault value
tokensチェックするブロックsubset of tokens LITERAL_DOLITERAL_ELSE
LITERAL_IFLITERAL_FOR
LITERAL_WHILE
all tokens


Samples

if (true) { // OK

    System.out.println();

}


if (true) // NG

    System.out.println();


RightCurly

Description

else、tryとcatchのコードブロックの終わり中括弧('}') の配置をチェックします。検証するポリシーはプロパティ option で指定します。

Properties

namedescriptiontypedefault value
option終わり中括弧('}')の配置に関するポリシーright curly brace policysame
tokensチェックするブロックsubset of tokens LITERAL_TRYLITERAL_CATCH,
LITERAL_FINALLYLITERAL_IF
LITERAL_ELSE
LITERAL_TRYLITERAL_CATCH,
LITERAL_FINALLYLITERAL_IF,
LITERAL_ELSE
shouldStartLineスタートラインにあるif'}'をチェックするかbooleantrue


Samples

option same の場合、括弧は次のステートメントと同じ行にこなければなりません。


try {

    ...

} finally {


option alone の場合、括弧は次のステートメントと同じ行にこなければなりません。


try {

    ...

}

finally {


shouldStartLineが true の場合


if (true) { // NG

   System.out.println(); }

if (true) { // OK

    System.out.println();

}


shouldStartLineが false の場合


if (true) { // OK 

   System.out.println(); }

if (true) { // OK

    System.out.println();

}


AvoidNestedBlocks

Description

ネストしたブロック、すなわちコード中で大量に使用されているブロックをチェックします。
背景: ネストしたブロックはしばしばデバッグプロセスから取り残されてしまい、 また読み手を混乱させます。
例えばこのチェックは以下のような無駄なブロックを見つけることができますし

public void guessTheOutput()

{

    int whichIsWich = 0;

    {

        int whichIsWhich = 2;

    }

    System.out.println("value = " + whichIsWhich);

}


またこのようなデバッグ/リファクタリングの残骸も見つけることができます


// if (conditionThatIsNotUsedAnyLonger)

{

    System.out.println("unconditional");

}


switch 文の case は暗黙的にブロックを形成することはありません。 このため、 case スコープを持つローカル変数を使用するためには ネストしたブロックを使う必要があります。これはサポートされます。 allowInSwitchCase プロパティを true に設定し、 case 内の全ての ステートメントをブロック内に含めてください。

switch (a) {

    case 0:

        // 不可。break がブロック外にある

        {

            x = 1;

        }

        break;

    case 1:

        // 不可。ステートメントがブロック外にある

        System.out.println("Hello");

        {

            x = 2;

            break;

        }

    case 2:

        // allowInSwitchCase が true ならばOK

        {

            System.out.println("Hello");

            x = 2;

            break;

        }

}


Properties

namedescriptiontypedefault value
allowInSwitchCasecase 文中でのネストしたブロックを許可するbooleanfalse

Comments