25

私の質問はこれのフォローアップです。

FindBugsの過去のバージョンでは、パッケージ内のすべてのフィールド@DefaultAnnotation(Nonnull.class)をとして使用または指定することが可能でした。FindBugs(2.0)の現在のバージョンでは、非推奨であり、代わりにJSR-305を使用する必要があります。しかし、JSR-305は、(現在は非推奨の)FindBugsアノテーションがカバーするすべてをカバーしているようには見えません。@DefaultAnnotationForFields(Nonnull.class)@Nonnull@DefaultAnnotation@DefaultAnnotationForFields

javadocは、いくつかの代替案を提案しています。

  • @ParametersAreNonnullByDefault。これは(明らかに)パラメータにのみ適用され、メンバーフィールドには適用されません。
  • @CheckReturnValue、タイプまたはパッケージに適用された場合。繰り返しますが、これはメンバーフィールドには適用されません。
  • @TypeQualifierDefault。多分これは私が望むことをすることができます、しかし私はそれがどのように機能するか理解していません、そして私はいくつかの不可解なjavadocを除いて、その使用法や意図に関するドキュメントや例を見つけることができません。独自の注釈を作成するのに役立つと思いますが、すべてのツール(FindBugs、Eclipseなど)がこの新しい注釈を正しく(またはまったく)解釈することを確認できますか?

javadocは、その非推奨に対処する方法についてのヒントを提供していません。

それで、FindBugsやJSR-305の現在のバージョンを使用して、特定のパッケージ(または特定のクラス)のすべてのメンバーフィールドがとして扱われることになっていることをどのように示す必要があります@Nonnullか?それも可能ですか?

4

1 に答える 1

25

同様の質問があり、次のように findbugs (2.0.1-rc2) で動作するようであることがわかりました。

次の注釈定義を使用して Java ファイルを作成します。

@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonNullByDefault
{
}

同様に、メソッドからのすべての戻り値が非 null であることを強制する

@Nonnull
@TypeQualifierDefault(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnTypesAreNonNullByDefault
{
}

次に、通常どおりパッケージに注釈を付けます。

テストには以下を使用しました(package-info.java)

@javax.annotation.ParametersAreNonnullByDefault
@com.habit.lib.lang.FieldsAreNonNullByDefault
@com.habit.lib.lang.ReturnTypesAreNonNullByDefault

package com.mypackagename.subpkg;
于 2012-08-04T10:41:52.777 に答える