web-dev-qa-db-ja.com

FindBugsの単一の警告を無視する方法はありますか?

PMDでは、特定の警告を無視する場合、// NOPMDを使用してその行を無視できます。

FindBugsに似たようなものはありますか?

174
Ben S

FindBugsの初期アプローチには、XML構成ファイル、つまり filters が含まれます。これはPMDソリューションよりも実際には便利ではありませんが、FindBugsはソースコードではなくバイトコードで動作するため、コメントは明らかにオプションではありません。例:

<Match>
   <Class name="com.mycompany.Foo" />
   <Method name="bar" />
   <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>

ただし、この問題を解決するために、FindBugsは後で annotationsSuppressFBWarnings を参照)に基づく別のソリューションを導入しました。これはクラスまたはメソッドレベルで使用できます(XMLよりも便利です)私の考えでは)。例(最良のものではないかもしれませんが、それは単なる例です):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing")

FindBugs 3.0.0以降、SuppressWarningsはJavaのSuppressWarningsと名前が衝突するため、@SuppressFBWarningsの代わりに廃止されました。

286
Pascal Thivent

他の人が言及したように、@SuppressFBWarnings注釈を使用できます。コードに別の依存関係を追加したくない、または追加できない場合は、アノテーションを自分でコードに追加できます。Findbugsは、アノテーションがどのパッケージであるかを気にしません。

@Retention(RetentionPolicy.CLASS)
public @interface SuppressFBWarnings {
    /**
     * The set of FindBugs warnings that are to be suppressed in
     * annotated element. The value can be a bug category, kind or pattern.
     *
     */
    String[] value() default {};

    /**
     * Optional documentation of the reason why the warning is suppressed
     */
    String justification() default "";
}

ソース: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88

18
hinneLinks

次に、XMLフィルタのより完全な例を示します(上記の例は、スニペットを示しているだけで、<FindBugsFilter>の開始タグと終了タグがないため、単独では機能しません):

<FindBugsFilter>
    <Match>
        <Class name="com.mycompany.foo" />
        <Method name="bar" />
        <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
    </Match>
</FindBugsFilter>

Android St​​udio FindBugsプラグインを使用している場合、File-> Other Settings-> Default Settings-> Other Settings-> FindBugs-IDEA-> Filter-> Exclude filter files-を使用してXMLフィルターファイルを参照します- >追加。

15
mbonness

Gradleを更新する

dependencies {
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}

FindBugsレポートを見つける

file:///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html

特定のメッセージを見つける

find bugs

正しいバージョンの注釈をインポートする

import edu.umd.cs.findbugs.annotations.SuppressWarnings;

問題のコードのすぐ上に注釈を追加します

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

詳細はこちらをご覧ください: findbugs Spring Annotation

9
anataliocs

これを書いている時点(2018年5月)では、FindBugsは SpotBugs に置き換えられているようです。 SuppressFBWarningsアノテーションを使用するには、コードをJava 8以降でコンパイルする必要があり、spotbugs-annotations.jarにコンパイル時の依存関係が生じます。

フィルターファイルを使用してSpotBugsルールをフィルター処理しても、このような問題はありません。ドキュメントは here です。

6
steve