knowledge base (ナレッジベース) ファイルの作成
knowledge base (ナレッジベース) ファイルを作成する前に、クラスごとに 1 つの .jkb を作成するか (このガイドのチュートリアルと例ではこのアプローチを使用しています)、検証やセキュリティなどに 1 つの .jkb を作成するかを決定する必要があります。
さらに、マルチセクションの knowledge base (ナレッジベース) ファイルにプロジェクト全体のためのマルチセクションの .jkb を作成できます。詳細については、以下の「マルチセクション knowledge base (ナレッジベース) の使用」を参照してください。
knowledge base (ナレッジベース) ファイルを手動作成 (または編集) するには:
- 拡張子 .jkb の新規テキストファイルを作成します。
- 好みのエディターで、チェッカーに対して特定する必要のあるメソッドシグネチャを追加し、Knowledge base (ナレッジベース) 注釈の手順で注釈を付加して、それぞれの処理方法をチェッカーに指示します。各注釈をファイルの 1 行に指定します。
マルチセクション knowledge base (ナレッジベース) の使用
Java ソースファイルには 1 つのパッケージ宣言のみを指定することができ、import ブロックの完了後は import をオーバーライドできません。これはモジュール性の高い Java ソースコードに最適ですが、プロジェクトまたはライブラリ全体に対して knowledge base (ナレッジベース) を指定する場合の knowledge base (ナレッジベース) には不適切になります。
.jkb ファイルには複数のパッケージ宣言を使用できます。これらのパッケージ宣言は、.jkb ファイルを個別のパッケージ宣言およびインポート宣言としてマルチセクションに分割します。
例
package java.util; import java.util.*; interface Entry<K,V> { @Source("return") K getKey(); } package java.io; // Here starts another section import java.net.URI; import java.net.URL; public class File { @Source("return") int getPrefixLength(); } import javax.swing.*; // Here starts another section class About @Source("return") JFrame getFrame(); }
パッケージに存在しないクラスを記述するには、以下のように "package;" を使用します。
@BindAll("ERROR") class AKB { void a(@Sink String s); } package java.lang; public class String { @Source("return") java.lang.String trim(); } package; class BKB { void b(@Sink String s); }