アノテーション
アノテーションは、クラス、メソッド、パラメーターなどのコード要素に関する情報を提供するメタデータの一部です。
Java には、一連の組み込みアノテーションがあります。 また、Spring や Lombok などの多くのライブラリやフレームワークは、独自のアノテーションを定義しています。 これらのアノテーションによって提供されるメタデータは、コンパイル時と実行時の両方で使用でき、たとえば定型コードを生成したり、リフレクションを通じてユーザークラスと対話したりできます。
コード契約アノテーション
コードのセマンティクスと契約を記述するアノテーションのクラスもあります。 開発者はこれらを使用して、特定の API を使用することの意味をよりよく理解し、静的アナライザーが問題のある領域を特定するのを支援できます。
IntelliJ IDEA は一般的な Java アノテーションを認識し、コードを分析する際に考慮します。 このようなアノテーションフレームワークの例は、 チェッカーフレームワーク(英語)および ErrorProne(英語) です。
JetBrains' @Contract アノテーションの詳細については、 公式リポジトリ(英語)を参照してください。
Null 可能性アノテーション
Nullability アノテーションは、コード契約アノテーションのサブセットです。 要素の null 可能性を明示的に宣言することで、コードの保守が容易になり、null 可能性に関連するエラーが発生しにくくなります。
一方、IntelliJ IDEAの静的解析は、設計時にこれらのアノテーションを使用して潜在的なエラーをキャッチします。 たとえば、IntelliJ IDEAはプロジェクトのデータフローを分析し、変数が null であるとデリファレースしようとしている試みを報告したり、逆に安全に削除できる冗長なガード条件を削除することを提案します。
Nullabilityアノテーションの設定
IntelliJ IDEA は一般的な nullability アノテーションを認識しますが、カスタムアノテーションをリストに追加することもできます。 IntelliJ IDEA は、シンボルの nullability を決定するために使用します。
に移動します。
オプション で、 アノテーションの構成 を選択します。
デフォルトの nullability アノテーション
デフォルトでは、次のアノテーションが IntelliJ IDEA によって認識されます。
android.support.annotation.Nullable
androidx.annotation.Nullable
androidx.annotation.RecentlyNullable
com.android.annotations.Nullable
edu.umd.cs.findbugs.annotations.Nullable
io.reactivex.annotations.Nullable
io.reactivex.rxjava3.annotations.Nullable
jakarta.annotation.Nullable
javax.annotation.CheckForNull
javax.annotation.Nullable
org.checkerframework.checker.nullness.compatqual.NullableDecl
org.checkerframework.checker.nullness.compatqual.NullableType
org.checkerframework.checker.nullness.qual.Nullable
org.eclipse.jdt.annotation.Nullable
org.jetbrains.annotations.Nullable
org.jspecify.annotations.Nullable
android.support.annotation.NonNull
androidx.annotation.NonNull
androidx.annotation.RecentlyNonNull
com.android.annotations.NonNull
edu.umd.cs.findbugs.annotations.NonNull
io.reactivex.annotations.NonNull
io.reactivex.rxjava3.annotations.NonNull
jakarta.annotation.Nonnull
javax.annotation.Nonnull
lombok.NonNull
org.checkerframework.checker.nullness.compatqual.NonNullDecl
org.checkerframework.checker.nullness.compatqual.NonNullType
org.checkerframework.checker.nullness.qual.NonNull
org.eclipse.jdt.annotation.NonNull
org.jetbrains.annotations.NotNull
org.jspecify.annotations.NonNull
null 可能性アサーションを無効にする
IntelliJ IDEA ビルドツールでプロジェクトをコンパイルすると、IDE は @NotNull アノテーションが付けられたすべてのコード要素にアサーションを追加します。 これらのアサーションは、実行時に要素が null である場合にエラーをスローします。 このフェイルファスト動作は、問題を早期に診断できます。 この効果が望ましくない場合は、これらのアサーションを無効にすることができます。
に移動し、 @NotNull メソッドやパラメーターに対して実行時アサーションを追加 オプションのチェックを外します。
null の推測
プロジェクトに null 可能性アノテーションが完全または部分的に欠落している場合、IntelliJ IDEA で null 可能性アノテーションを推測して挿入することができます。
アノテーション付きのライブラリがプロジェクト用に構成されていることを確認してください。 IntelliJ IDEA は、 の コード生成に使用されるアノテーション で指定されたアノテーションを使用します。
メインメニューで へ移動します。
推論無効範囲を指定する ダイアログで、分析の範囲を選択します。 テストソースを含めたり、ローカル変数にアノテーションを付けたりする場合は、対応するチェックボックスを選択します。
JetBrainsアノテーションの依存関係
IntelliJ IDEA には、別の依存関係として利用できる独自のアノテーションセットがあります。 null 可能性、範囲、契約、可変性、純度などを表現するためのアノテーションが含まれています。
パッケージは、数十のアノテーションで構成されています。 最も一般的なもののいくつかは次のとおりです。
@Nullableおよび@NotNull– null にできる、またはできない変数、パラメーター、戻り値を示します。@Nls– アノテーション付きコード要素がローカライズする必要がある文字列であることを示します。@NonNls– アノテーション付きコード要素が、ユーザーには表示されず、ローカライズを必要とせず、ローカライズを必要とする文字列を含まない文字列であることを示します。 要素に@NonNlsのアノテーションを付けると、ローカライゼーションツールはこの要素とその中の文字列をスキップします。@PropertyKey– メソッドパラメーターが、特定のリソースバンドル内の有効なプロパティキーである必要がある引数を受け入れることを示します。 バンドル内のプロパティキーではない文字列リテラルがパラメーターとして渡されると、IntelliJ IDEA はそれをエラーとしてハイライトします。 アノテーションは、パラメーターとして渡される文字列リテラルで補完を提供するためにも使用されます。@TestOnly– メソッドまたはコンストラクターをテストコードからのみ呼び出す必要があることを示します。@Contract– メソッドが従わなければならない一連の規則 (契約) を指定できます。 契約に違反した場合、IntelliJ IDEA は問題を報告します。@Language– 別の言語で書かれたコードを Java 文字列に挿入します。
プロジェクトにJetBrainsアノテーション依存関係を追加
コードで JetBrains アノテーションを使用する場合、 クラスパスに「アノテーション」を追加する インテンションアクションは、必要な依存関係をすばやく追加できます。

それ以外の場合は、次のアーティファクト座標を使用して手動で追加できます: https://central.sonatype.com/artifact/org.jetbrains/annotations/24.0.1
<dependencies> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> <version>26.0.2</version> <scope>provided</scope> </dependency> </dependencies>dependencies { compileOnly 'org.jetbrains:annotations:26.0.2' }dependencies { compileOnly("org.jetbrains:annotations:26.0.2") }に移動します。
をクリックし、 Maven から を選択します。 検索フィールドに
org.jetbrains:annotations:26.0.2と入力します。 OK をクリックします。
推論されたアノテーション
コードにまったくアノテーションが付けられていない場合でも、IntelliJ IDEA はバイトコードとソースから多くのアノテーションを推測できます。 これらのアノテーションはコードに物理的に挿入されるわけではありませんが、IDE では、コードの連絡先をよりよく理解できるように配置されているかのように表示されます。 推測されたアノテーションは、通常のアノテーションと同様にコード分析にも使用されます。
IntelliJ IDEA は次の JetBrains アノテーション を推論できます: @Nullable、 @NotNull、 @Contract、 @Unmodifiable 、および @UnmodifiableView。 これらのアノテーションのフレーバーについての完全なドキュメントは、 パッケージのソースコードを参照してください。
エディターでは、推測されたアノテーションは、ガターの アイコンでマークされます。

コードに推測されたアノテーションを追加
推測されたアノテーションをコードに物理的に挿入する場合は、目的のアノテーションの近くにある
をクリックしてから、 挿入 を選択します。

インラインで推測されたアノテーションを表示
コード内に推論されたアノテーションを表示するように IDE を設定できます。

Ctrl+Alt+S を押して設定を開き、 を選択します。
推論されたアノテーション のチェックボックスを選択します。
外部アノテーション
アノテーションを明示的に使用したいが、コードベースを混乱させたくない場合は、アノテーションを外部に保存することもできます。 アノテーション付きのファイルを共通リポジトリにコミットするか、ローカル環境に排他的に保持するかを選択できます。
外部アノテーションは、 annotations.xml という XML ファイルのソースコードの外に保存される通常のアノテーションです。
それらを使用する一般的なケースは次のとおりです。
メンバーがさまざまな IDE と静的分析ツールを使用するチームで作業する
ライブラリクラスなど、ソースを変更できないコードにアノテーションを付ける
非常に特定の目的を果たすアノテーション (たとえば、 @Async.Schedule/Execute や @DebugRenderer) からコードをクリーンに保ちます。
コードでは、外部アノテーションは ガターアイコンでマークされ、灰色でハイライトされます。 デフォルトでは、IntelliJ IDEA はエディターに外部アノテーションを表示します。

外部アノテーションを有効化
外部アノテーションを使用するには、設定で有効にする必要があります。 この手順を省略した場合、ライブラリコードに外部的にアノテーションを付けることができますが、ソースコードで外部アノテーションを使用することはできません。
Ctrl+Alt+S を押して設定を開き、 を選択します。
外部アノテーションを使用 のチェックボックスを選択します。
外部アノテーションを追加
次のいずれかの方法で外部アノテーションを指定します。
プロジェクトコードで作業するときには、アノテーションを入力してから、 外部へのアノテーション のインテンションアクションを使用できます。 インテンションアクションメニューにアクセスするには、アノテーションにキャレットを置いて Alt+Enter (またはインテンションアクションの
アイコンをクリックします)。 
プロジェクトコードとライブラリの両方に使用できる別の方法は、要素自体で アノテーション インテンションアクションを使用することです。

現在のコンテキストで使用可能なアノテーションに応じて、IntelliJ IDEA はメニューから目的のアノテーションを選択するか、使用できるアノテーションが 1 つしかない場合は、すぐに挿入することを提案します。
プロジェクトまたはモジュール用にアノテーションディレクトリがまだ構成されていない場合、IntelliJ IDEA はそれをセットアップするようにプロンプトを出します。
このモジュール内に追加する各外部アノテーションは、このフォルダーに保存されます。 複数のアノテーションルートがある場合、IntelliJ IDEA はどれを使用するかを確認します。
この場所は後で変更できます。
外部アノテーションを削除
アノテーション付き要素の近くにあるガターアイコンをクリックし、 アノテーション解除 を選択します。

アノテーションのルートディレクトリを設定
アノテーションルートディレクトリは、外部アノテーションを保存するフォルダーです。 これらは、適用されるプロジェクトの部分に応じて、さまざまな場所で構成されます。
プロジェクト全体:
個々のモジュールについて:
外部 Maven/Gradle 依存関係の場合:
外部アノテーションを非表示
外部アノテーションは、デフォルトでエディターに表示されます。 コードから隠すことができます:
外部アノテーションを右クリックし、 外部アノテーションの表示 オプションを無効にします。 インレイヒントが非表示の場合、ガター内の
アイコンのみがコード内での存在をマークします。
後でインレイヒントを有効にしたい場合は、 で実行できます。
言語インジェクションのアノテーション付け
JetBrains アノテーションライブラリの @Language アノテーションを使用して、メンバーやパラメーターなどのコード要素に言語インジェクションとしてアノテーションを付けることができます。 これにより、IDE で適切なハイライト表示、ナビゲーション、検索が可能になります。
例: アノテーションパラメーターを Java メソッドを参照するものとしてマークできます。
IntelliJ IDEA は、アノテーションが付けられた文字列をメソッド名として認識し、アノテーションが付けられた要素で 名前変更リファクタリングやその他の機能を使用できるようにします。
