PMD Javaルール Documentation

PMDのJavaルールについてまとめます。バージョン6.35.0時のルールとなっています。
非推奨となっているルールには「△」を先頭に付与しています。

バージョン6.35.0から6.47.0までのルールの差分については別の記事でまとめています。 olafnosuke.hatenablog.com

Documentationカテゴリには、コードドキュメントに関連するルールを含んでいる。

CommentContent

コメント内に他人が見て気分が悪くなる言葉を書かない。

// NG
// OMG, this is horrible, Bob is an idiot !!!

プロパティ

名前 デフォルト値 説明 複数指定
caseSensitive false 大文字と小文字を区別するかどうか -
disallowedTerms idiot| jerk コメントで禁止する語句 「|」区切りで指定

ルール設定例

<!-- プロパティ設定なし -->
<rule ref="category/java/documentation.xml/CommentContent" />

<!-- プロパティ設定あり -->
<rule ref="category/java/documentation.xml/CommentContent">
    <properties>
        <property name="caseSensitive" value="false" />
        <property name="disallowedTerms" value="idiot|jerk" />
    </properties>
</rule>

CommentRequired

Javadocコメントの記述を必須にする。
デフォルトでは以下のコメントが必須
・クラス、フィールド
・public/protectedのメソッド、コンストラク
enum

プロパティ

RequiredIgnoredUnwantedのどれかを指定する

・Required:必要
・Ignored:無視(チェック対象外)
・Unwanted:不要

名前 デフォルト値 説明 複数指定
methodWithOverrideCommentRequirement Ignored @Override メソッドに関するコメントの必要性 -
accessorCommentRequirement Ignored ゲッターとセッターに関するコメントの必要性 -
classCommentRequirement Required クラスのコメントの必要性 -
fieldCommentRequirement Required フィールドのコメントの必要性 -
publicMethodCommentRequirement Required パブリックメソッドとコンストラクタのコメントの必要性 -
protectedMethodCommentRequirement Required プロテクトメソッドとコンストラクタのコメントの必要性 -
enumCommentRequirement Required enumのコメントの必要性 -
serialVersionUIDCommentRequired Ignored serialVersionUIDのコメントの必要性 -
serialPersistentFieldsCommentRequired Ignored serialPersistentFieldsのコメントの必要性 -

ルール設定例

<!-- プロパティ設定なし -->
<rule ref="category/java/documentation.xml/CommentRequired" />

<!-- プロパティ設定あり -->
<rule ref="category/java/documentation.xml/CommentRequired">
    <properties>
        <property name="methodWithOverrideCommentRequirement" value="Ignored" />
        <property name="accessorCommentRequirement" value="Ignored" />
        <property name="classCommentRequirement" value="Required" />
        <property name="fieldCommentRequirement" value="Required" />
        <property name="publicMethodCommentRequirement" value="Required" />
        <property name="protectedMethodCommentRequirement" value="Required" />
        <property name="enumCommentRequirement" value="Required" />
        <property name="serialVersionUIDCommentRequired" value="Ignored" />
        <property name="serialPersistentFieldsCommentRequired" value="Ignored" />
    </properties>
</rule>

CommentSize

コメントが制限値よりも長くないかをチェックする。 デフォルトでは、1行80文字以内で6行以内。

// NG 行数が多すぎる 6行以内にするべき
/**
*
*   too many lines!
*
*
*
*
*
*
*
*
*
*
*
*
*/
public void foo() {
}

プロパティ

名前 デフォルト値 説明 複数指定
maxLines 6 最大行数 -
maxLineLength 80 最大ライン長 -

ルール設定例

<!-- プロパティ設定なし -->
<rule ref="category/java/documentation.xml/CommentSize" />

<!-- プロパティ設定あり -->
<rule ref="category/java/documentation.xml/CommentSize">
    <properties>
        <property name="maxLines" value="6" />
        <property name="maxLineLength" value="80" />
    </properties>
</rule>

UncommentedEmptyConstructor

処理が空でコメントも記述されていないコンストラクタが存在するかどうか。

// NG
public class Sample {
    public Sample () {
    }
}

// OK
public class Sample {
    public Sample () {
        // コメント
    }
}

プロパティ

名前 デフォルト値 説明 複数指定
ignoreExplicitConstructorInvocation false コンストラクターが空かどうかを判断するときに明示的なコンストラクターの呼び出しを無視するかどうか -

ルール設定例

<!-- プロパティ設定なし -->
<rule ref="category/java/documentation.xml/UncommentedEmptyConstructor" />

<!-- プロパティ設定あり -->
<rule ref="category/java/documentation.xml/UncommentedEmptyConstructor">
    <properties>
        <property name="ignoreExplicitConstructorInvocation" value="false" />
    </properties>
</rule>

UncommentedEmptyMethodBody

処理が空でコメントも記述されていないメソッドが存在するかどうか。

// NG
public class Sample {
    public void doSomething () {
    }
}

// OK
public class Sample {
    public void doSomething () {
        // コメント
    }
}

ルール設定例

<rule ref="category/java/documentation.xml/UncommentedEmptyMethodBody" />

他のカテゴリのルールもまとめています。

Best Practiceカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Code Styleカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Designカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Error Proneカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Multithreadingカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Performanceカテゴリのまとめはこちら: olafnosuke.hatenablog.com

Securityカテゴリのまとめはこちら: olafnosuke.hatenablog.com