Checkstyle Javaルール

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

ImportOrder

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

インポートの順番やグループ分けをチェックする。

チェック内容には以下のものがある。

  • インポートグループが特定の順序になっていること
  • 各グループの間に空白行があること
  • 各グループが空白行やコメントで内部的に分離されていないこと
  • 各グループ内のインポートが辞書順であること
  • インポート間の比較が大文字と小文字を区別されていること
  • 型インポートとstaticインポートの相対的な順序を保証すること

プロパティ

プロパティ デフォルト値 説明 追加バージョン
option ImportOrderOption under 型のインポートとstaticインポートの相対的な順序に関するポリシー 5.0
groups Pattern[] {} 型インポートグループのリスト
すべてのグループは、共通のプレフィックス文字列、またはスラッシュで囲まれた正規表現 (例: /regexp/) によって識別される。
どのグループにもマッチしない型インポートは、最後に自動で追加されるグループに分類される。したがって、タイプグループの空リスト(デフォルト値)は、すべての型インポートが1つのグループに属することを意味する
3.2
ordered boolean true 各グループ内の型のインポートをソートするかどうか
staticインポートには影響しない
3.2
separated boolean false 型のインポートグループを、少なくとも1行の空白行またはコメントで区切り、 内部で区切らないようにするかどうか
staticインポートには影響しない
3.2
separatedStaticGroups boolean false sstaticインポートグループを、少なくとも1行の空白行またはコメントで区切り、内部で区切らないようにするかどうか
optionがtopまたはbottomに設定され、staticGroupsが有効な場合にのみ有効
8.12
caseSensitive boolean true 文字列比較を大文字小文字を区別して行うかどうか
大文字小文字を区別したソートは、ASCIIのソート順となる。これは、型インポートとstaticインポートの両方に影響する。
3.3
staticGroups Pattern[] {} staticインポートグループのリスト
各グループは共通のプレフィックス文字列、またはスラッシュで囲まれた正規表現 (例: /regexp/) によって識別される。
どのグループにも一致しないすべてのstaticインポートは、最後に自動で追加されるグループに分類される。したがって、staticグループの空のリスト(デフォルト値)は、すべてのstaticインポートが1つのグループに属することを意味する。このプロパティは、optionがtopまたはbottomに設定されている場合にのみ有効
8.12
sortStaticImportsAlphabetically boolean false グループ内で上下に配置されたstaticインポートをソートするかどうか 6.5
useContainerOrderingForStatic boolean false staticインポートにコンテナ順序(Eclipse IDE用語)を使用するかどうか 7.1

〇ImportOrderOptionには以下の値が設定可能

説明
top すべてのstaticインポートが一番上に配置される
above staticインポートは同一クラスのローカルインポートより上に配置する
inflow すべてのstaticインポートは、staticインポートでないものと同様に処理する
under staticインポートは同一クラスのローカルインポートより下に配置する
bottom すべてのstaticインポートが一番下に配置される

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

import java.io.IOException;
import java.net.URL;

// NG 余計な分離(空行)がある
import java.io.IOException;
import javax.net.ssl.TrustManager;
import javax.swing.JComponent;
import org.apache.http.conn.ClientConnectionManager;
// NG 'java' は 'org' より前に記述する
import java.util.Set;
// NG 'com'は一番上に記述するべき
import com.neurologic.http.HttpClient;
import com.neurologic.http.impl.ApacheHttpClient;

プロパティ設定あり

Eclipse のデフォルトのフォーマッター設定と一致するようなチェックを設定例

  • staticインポートのグループが一番上にある
  • タイプのインポートのグループ。「java」と「javax」パッケージを最初に、次に「org」、そして他のすべてのインポートの順に並べる
  • インポートはグループ内でソートされる
  • グループは少なくとも1行の空白行で区切られ、内部では区切られていない

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="ImportOrder">
            <property name="groups" value="/^java\./,javax,org"/>
            <property name="ordered" value="true"/>
            <property name="separated" value="true"/>
            <property name="option" value="above"/>
            <property name="sortStaticImportsAlphabetically" value="true"/>
        </module>
    </module>
</module>

チェック実行例

import static java.lang.System.out;
import static java.lang.Math; // NG SystemよりMathを上に書く
import java.io.IOException;

import java.net.URL; // NG 無駄な空行
import java.security.KeyManagementException;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager; // NG 同じグループ内で空行を入れない

import org.apache.http.conn.ClientConnectionManager;

public class SomeClass {
}