回答:
FindBugsの最初のアプローチには、XML構成ファイル(フィルター)が含まれます。これはPMDソリューションほど便利ではありませんが、FindBugsはソースコードではなくバイトコードで機能するため、コメントは明らかにオプションではありません。例:
<Match>
<Class name="com.mycompany.Foo" />
<Method name="bar" />
<Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>
ただし、この問題を解決するために、FindBugsはアノテーションSuppressFBWarnings
またはクラスレベルで使用できる別のソリューション(を参照)を導入しました(私の意見ではXMLよりも便利です)。例(おそらく最良のものではないかもしれませんが、それは単なる例です):
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value="HE_EQUALS_USE_HASHCODE",
justification="I know what I'm doing")
FindBugs 3.0.0以降では、Javaとの名前の衝突のため、SuppressWarnings
非推奨になっていることに注意してください。@SuppressFBWarnings
SuppressWarnings
<dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
<dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>
、使用する場合はPOMに追加する必要があります@SuppressFBWarnings
。
他の人が言及したように、あなたは@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
以下は、XMLフィルターのより完全な例です(上記の例は、スニペットが表示され、<FindBugsFilter>
開始タグと終了タグが欠落しているため、それ自体では機能しません)。
<FindBugsFilter>
<Match>
<Class name="com.mycompany.foo" />
<Method name="bar" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
</FindBugsFilter>
Android Studio FindBugsプラグインを使用している場合は、[ファイル]-> [その他の設定]-> [デフォルト設定]-> [その他の設定]-> [FindBugs-IDEA]-> [フィルター]-> [フィルターファイルを除外]-> [追加]を使用してXMLフィルターファイルを参照します。
Gradleを更新する
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
FindBugsレポートを見つける
file:///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
特定のメッセージを見つける
正しいバージョンのアノテーションをインポートする
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
問題のコードのすぐ上に注釈を追加します
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
詳細はこちらをご覧ください:findbugs Spring Annotation
compile 'net.sourceforge.findbugs:annotations:1.3.2'
代わりに短い構文を使用できます。
testCompile 'com.google.code.findbugs:annotations:3.0.0'
@SuppressFBWarnings
これを書いている時点(2018年5月)では、FindBugsはSpotBugsに置き換えられているようです。SuppressFBWarnings
アノテーションを使用するには、コードをJava 8以降でコンパイルする必要があり、コンパイル時の依存関係がに導入されspotbugs-annotations.jar
ます。
フィルターファイルを使用してSpotBugsルールをフィルターしても、そのような問題はありません。ドキュメントはこちらです。
ここでの他の回答は有効ですが、これを解決するための完全なレシピではありません。
完全性の精神で:
pomファイルにfindbugsアノテーションを含める必要があります。これらはコンパイル時のみなので、provided
スコープを使用できます。
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
これにより、@SuppressFBWarnings
を提供する別の依存関係を使用できます@SuppressWarnings
。ただし、上記の方が明確です。
次に、メソッドの上に注釈を追加します。
例えば
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE",
justification = "Scanning generated code of try-with-resources")
@Override
public String get() {
try (InputStream resourceStream = owningType.getClassLoader().getResourceAsStream(resourcePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, UTF_8))) { ... }
これには、バグの名前と、スキャンを無効にする理由の両方が含まれます。
私はこれをここに残します:https : //stackoverflow.com/a/14509697/1356953
これは動作するjava.lang.SuppressWarnings
ため、個別のアノテーションを使用する必要がないことに注意してください。
フィールドの@SuppressWarningsは、そのフィールドに関連付けられているすべての警告ではなく、そのフィールド宣言について報告されたfindbugs警告のみを抑制します。
たとえば、これは「フィールドのみがnullに設定される」という警告を抑制します。
@SuppressWarnings( "UWF_NULL_FIELD")文字列s = null; あなたができる最善のことは、警告付きのコードを可能な限り最小のメソッドに分離し、メソッド全体の警告を抑制することです。
java.lang.SuppressWarnings
働けません。ソース保持があるため、findbugsには表示されません。