1. ホーム

[解決済み] [Solved] 特定の行のコードに対して特定のCheckstyleルールを無効にしますか?

2022-04-12 13:23:37

質問

私は チェックスタイル この検証ルールは、3つ以上の入力パラメータを持つクラスメソッドを定義することを禁止するもので、私のプロジェクトで設定されています。このルールは 私の しかし、このルールに従わないサードパーティのクラスを拡張しなければならないことがあります。

Checkstyleに、あるメソッドを黙って無視するように指示することはできますか?

ちなみに、結局Checkstyleのラッパーを自作しました。 qulice.com (参照 Javaコード品質の厳格な管理 )

解決するには?

supressionCommentFilterの使い方は、以下のサイトで確認してください。 http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter . このモジュールを checkstyle.xml に追加する必要があります。

<module name="SuppressionCommentFilter"/>

と設定可能です。 したがって、コードにコメントを追加して checkstyle を (さまざまなレベルで) オフにし、コード内のコメントの使用によって再びオンにすることができます。 例

//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON

あるいは、もっと手を加えたこのバージョンを使うのもよいでしょう。

<module name="SuppressionCommentFilter">
    <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
    <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
    <property name="checkFormat" value="$1"/>
</module>

で、特定のコード行のチェックをオフにすることができます。

//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions
catch (Exception e)
//CHECKSTYLE.ON: IllegalCatch

*注意: また、このページには FileContentsHolder :

<module name="FileContentsHolder"/>

こちらもご覧ください

<module name="SuppressionFilter">
    <property name="file" value="docs/suppressions.xml"/>
</module>

の下に SuppressionFilter セクションで、パターンマッチリソースのチェックを個別にオフにすることができます。

そこで、checkstyle.xmlにある場合。

<module name="ParameterNumber">
   <property name="id" value="maxParameterNumber"/>
   <property name="max" value="3"/>
   <property name="tokens" value="METHOD_DEF"/>
</module>

で抑制のxmlファイルでオフにすることができます。

<suppress id="maxParameterNumber" files="YourCode.java"/>

Checkstyle 5.7 で利用できるようになったもう一つの方法は、違反行為を @SuppressWarnings javaアノテーションを使用します。 これを行うには、2つの新しいモジュール( SuppressWarningsFilterSuppressWarningsHolder ) を設定ファイルに追加してください。

<module name="Checker">
   ...
   <module name="SuppressWarningsFilter" />
   <module name="TreeWalker">
       ...
       <module name="SuppressWarningsHolder" />
   </module>
</module> 

そして、コード内で次のようにします。

@SuppressWarnings("checkstyle:methodlength")
public void someLongMethod() throws Exception {

または、多重抑制の場合。

@SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"})
public void someLongMethod() throws Exception {

NB: の"です。 checkstyle: という接頭辞は任意です(ただし推奨)。ドキュメントによると、パラメータ名はすべて小文字でなければならないようですが、実際にはどのようなケースでも動作するようです。