@ApiStatus.OverrideOnly でマークされている API メソッドの呼び出しを報告します。
@ApiStatus.OverrideOnly アノテーションはクライアントコードによって直接呼び出されるのではなく、実装またはオーバーライドされることを意図したメソッドを示します。
このパターンは何らかのインターフェースに従って実装を行う必要のある拡張の仕組みで一般的に現れるものですが、その呼び出しは開発者が行うべきものではありません。
このような拡張の仕組みの例としては、サービスプロバイダーインターフェースがあります。
このアノテーションでクラスやインターフェースをマークすることは、このアノテーションですべてのメソッドをマークすることと同じです。
@ApiStatus.OverrideOnly アノテーションは、このメソッドが SPI (サービスプロバイダーインターフェース) の一部であることを示しています。
宣言するライブラリのクライアントは、このようなメソッドを直接呼び出すのではなく、実装またはオーバーライドする必要があります。
このアノテーションでクラスやインターフェースをマークすることは、このアノテーションですべてのメソッドをマークすることと同じです。
例:
// 上流のライブラリコード内
@ApiStatus.OverrideOnly
public class MyService {
public void perform();
}
// 下流のクライアントコード内
public class Foo {
public void bar(myService: MyService) {
myService.perform();
}
}
このインスペクションは、アノテーションの不正な適用に関連する以下の問題も検出します:
@ApiStatus.OverrideOnly アノテーションが付いているクラスのメソッドにアノテーションが冗長に付けられている。