Checkstyle Javaルール

CheckstyleのJavaルールについて1つずつまとめます

AbbreviationAsWordInName

CheckStyle公式ドキュメント

検証環境

Checkstyleバージョン:10.8.0
Javaバージョン:17


チェック概要

チェック追加バージョン
Checkstyle 5.8

識別子名に含まれる略語(連続した大文字)の長さを検証する。
キャメルケースの命名を強制することも可能である。名前に長い略語を使わない方法については、Googleスタイルガイドを参照。

_は識別子名の単語区切り文字とみなされる。

allowedAbbreviationLengthは、識別子で使用できる連続した大文字の数を指定する。値に3を設定した場合、最大4つの連続した大文字が許可されることを示す。すなわち、MyTESTは許可されるが、MyTESTSはチェックNGとなる。
値に0を設定した場合、連続する大文字が1つだけ許されることを示す。これは、厳密なキャメルケースを強制するために使用される。この場合、MyTestは許されるが、MyTEstはチェックNGとなる。

ignoreFinalignoreStaticignoreStaticFinal は、それぞれの修飾子を持つ変数を無視するかどうかを制御する。
staticとfinalの両方を持つ変数は、ignoreFinalとignoreStaticの値にかかわらず、常にignoreStaticFinalのみで考慮されることに注意すること。例えば、ignoreStaticがtrueでignoreStaticFinalがfalseの場合、static finalな変数は無視されないことになる。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
allowedAbbreviationLength int 3 対象となる識別子(クラス,インターフェース,変数名,メソッド名の略称など)に使用できる連続した大文字の数 5.8
allowedAbbreviations String[] {} チェック対象外とする変数名・クラス名など 5.8
ignoreFinal boolean true final修飾子のついた変数のチェックをスキップするかどうか 5.8
ignoreStatic boolean true static修飾子のついた変数のチェックをスキップするかどうか 5.8
ignoreStaticFinal boolean true static final修飾子のついた変数のチェックをスキップするかどうか 8.32
ignoreOverriddenMethods boolean true @Overrideのついたメソッドのチェックをスキップするかどうか 5.8
tokens トークンの サブセット CLASS_DEF,
INTERFACE_DEF,
ENUM_DEF,
ANNOTATION_DEF,
ANNOTATION_FIELD_DEF,
PARAMETER_DEF,
VARIABLE_DEF,
METHOD_DEF,
PATTERN_VARIABLE_DEF,
RECORD_DEF,
RECORD_COMPONENT_DEF
チェック対象のトーク 5.8

トークンのサブセットには以下の値が設定可能

説明
CLASS_DEF クラス宣言
INTERFACE_DEF インターフェース宣言
ENUM_DEF Enum宣言
ANNOTATION_DEF アノテーション宣言
ANNOTATION_FIELD_DEF アノテーションフィールド宣言
PARAMETER_DEF パラメータ宣言
VARIABLE_DEF フィールド・ローカル変数宣言
METHOD_DEF メソッド宣言
ENUM_CONSTANT_DEF Enum定数宣言
PATTERN_VARIABLE_DEF パターン変数宣言
RECORD_DEF レコード宣言
RECORD_COMPONENT_DEF レコードコンポーネント宣言

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName"/>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

プロパティ設定あり

allowedAbbreviationLength

対象となる識別子(クラス,インターフェース,変数名,メソッド名の略称など)に使用できる連続した大文字の数
デフォルト:3

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="allowedAbbreviationLength" value="1"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して2文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して2文字以上使用している
    void incrementCOUnter() {
        CURRENT_COUNTER++;
    }

    // OK
    static void incrementGLobal() {
        GLOBAL_COUNTER++;
    }
}

allowedAbbreviations

チェック対象外とする変数名・クラス名など

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="allowedAbbreviations" value="COUNTER"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // OK 「COUNTER」はチェック対象外
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // OK
    static void incrementGLobal() {
        GLOBAL_COUNTER++;
    }
}

ignoreFinal

final修飾子のついた変数のチェックをスキップするかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="ignoreFinal" value="false"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // NG 「ignoreFinal=false」なので、大文字を連続して4文字以上使用しているとNG
    final Set<String> stringsFOUND = new HashSet<>();
    
    // OK static finalフィールドはチェック対象外
    static final int AGE_COUNTER;

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

ignoreStatic

static修飾子のついた変数のチェックをスキップするかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="ignoreStatic" value="false"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // NG 「ignoreStatic=false」なので、大文字を連続して4文字以上使用しているとNG
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();
    
    // OK static finalフィールドはチェック対象外
    static final int AGE_COUNTER;

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

ignoreStaticFinal

static final修飾子のついた変数のチェックをスキップするかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="ignoreStaticFinal" value="false"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();
    
    // NG 「ignoreStaticFinal=false」なので、大文字を連続して4文字以上使用しているとNG
    static final int AGE_COUNTER;

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

ignoreOverriddenMethods

@Overrideのついたメソッドのチェックをスキップするかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="ignoreOverriddenMethods" value="false"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // NG 大文字を連続して4文字以上使用している
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();
    
    // OK static finalフィールドはチェック対象外
    static final int AGE_COUNTER;

    // 「ignoreOverriddenMethods=false」なので、大文字を連続して4文字以上使用しているとNG
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

tokens

チェック対象のトークンをコンマ区切りで指定する。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AbbreviationAsWordInName">
            <property name="tokens" value="METHOD_DEF"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass extends SuperClass {
    // OK チェック対象がメソッド定義のみなのでOK
    int CURRENT_COUNTER;
    
    // OK staticフィールドはチェック対象外
    static int GLOBAL_COUNTER;
    
    // OK finalフィールドはチェック対象外
    final Set<String> stringsFOUND = new HashSet<>();

    // OK @Overrideメソッドは対象外
    @Override
    void printCOUNTER() {
        System.out.println(CURRENT_COUNTER);
    }

    // NG 大文字を連続して4文字以上使用している
    void incrementCOUNTER() {
        CURRENT_COUNTER++;
    }

    // NG 大文字を連続して4文字以上使用している
    static void incrementGLOBAL() {
        GLOBAL_COUNTER++;
    }
}

1月末から仕事繁忙期になってしまい投稿が久々になってしまってすみません・・・