20

私は最近、FindBugs の注釈を発見しまし@edu.umd.cs.findbugs.annotations.SuppressWarningsた。これは非常にクールで、基本的に FindBugs に特定の警告を無視するように指示することができます。

slf4j-simple独自のロガーおよびロガー ファクトリ バインディングで取得および変更するという推奨事項に従って、独自の SLF4J バインディングを正常に実装しました。

StaticLoggerBinderこの SLF4J バインディングを含むパッケージで find bugs を実行したところ、元の作成者 (Ceki Gulku)によって記述された特定のコード行について不平を言っています。

// to avoid constant folding by the compiler, this field must *not* be final.
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final

FindBugs は、このフィールドは「最終的なものではありませんが、最終的なものであるべきです」と不平を言っています。しかし、SLF4J の (非常に) 賢い人々はすでにそれを考えており、上記の周囲のコメントを配置しました。

そこで、FindBugs を黙らせるために、FB 警告を抑制する通常の方法でコードを修正しました。

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
public static String REQUESTED_API_VERSION = "1.6";

プロジェクトをクリーンアップして FindBugs を再実行すると、同じコード行で2 回目の警告が表示されます。

このフィールドは読み取られません。フィールドは public または protected であるため、分析の一部として認識されないクラスで使用することを意図している可能性があります。そうでない場合は、クラスから削除することを検討してください。

この 2 番目の警告抑制を追加すると、次のようになります。

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public static String REQUESTED_API_VERSION = "1.6";

Eclipse からコンパイラ/構文エラーが発生します。

アノテーション @SuppressWarnings が重複しています。

同じコード行で複数の FindBugs 警告を抑制するにはどうすればよいですか?

4

3 に答える 3

23

単一の注釈内で、配列内のすべての警告識別子をリストするだけです。

@edu.umd.cs.findbugs.annotations.SuppressWarnings({
        "MS_SHOULD_BE_FINAL", 
        "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";

標準のjava.lang.SuppressWarningsと同様に、FindBugs バージョンにもtype のパラメーターがありますString[]。値が 1 つの場合は、作業を簡単にするために中括弧を省略できます。

于 2012-06-05T11:27:51.130 に答える
1

これを試して:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({"MS_SHOULD_BE_FINAL" , "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";
于 2012-06-05T11:29:03.330 に答える