Java カスタム関数
カスタム関数によってチェッカーを作成する場合、kwcreatechecker の --kast-library オプションを使用します。これによりプラグインソースを格納する MyFunc.java ファイルと、jar に含まれるカスタム関数を登録する plugin_functions.xml ファイルが作成されます。
MyFunc.java ファイルにソースを追加する
各カスタム Java 関数は、次の 3 つの抽象クラスの 1 つの拡張となる別々のクラスとして実装する必要があります:CustomIntFunction、CustomBoolFunction、CustomTreeFunction。そのようなクラスには、それぞれKAST 式の関数名に対応する名前が関連付けられています。KAST 式でカスタム関数を呼び出す場合、タイプ 'tree' の単一の引数を指定することができますが、引数をまったく指定しない場合もあります。後者の場合、現在のノードが処理されます。
- 整数型カスタム関数が必要な場合は、com.klocwork.jxpath.CustomIntFunction 抽象クラスを拡張する新しいクラスを定義し、そのメソッドをオーバーライドします。
public long evaluate(com.klocwork.javaapi.jtree.TreeNode node);
- ブール型カスタム関数が必要な場合は、com.klocwork.jxpath.CustomBoolFunction 抽象クラスを拡張する新しいクラスを定義し、そのメソッドをオーバーライドします。
public boolean evaluate(com.klocwork.javaapi.jtree.TreeNode node);
- タイプ 'tree' の値を返すカスタム関数が必要な場合は、com.klocwork.jxpath.CustomTreeFunction 抽象クラスを拡張する新しいクラスを定義し、そのメソッドをオーバーライドします。
public com.klocwork.javaapi.jtree.TreeNode evaluate(com.klocwork.javaapi.jtree.TreeNode node);
カスタム関数は、'evaluate' メソッドで実装する必要があります。AST ノードは、com.klocwork.javaapi パッケージからクラスを使用してアクセスできます。
plugin_functions.xml ファイル
カスタム関数を実装するクラスは、1 つまたは複数の jar (プラグイン) にパックする必要があります。各 jar では、その内部ファイル階層の最上位に plugin_functions.xml ファイルが必要です。このファイルは、対応する jar に含まれるすべてのカスタム関数を登録します。
plugin_functions.xml ファイルの書式は次のとおりです。
<plugin> <function name="name1" class="class1"/> <function name="name2" class="class2"/> ... </plugin>
フィールド name1、name2 などは KAST 式内のカスタム関数を示すために使用されていますが、class1、class2 などは関連付けられたクラスの完全修飾名です。たとえば、次のようになります。
<plugin> <function name="isAssignment" class="com.klocwork.plug-ins.IsAssignment"/> <function name="isShift" class="com.klocwork.plug-ins.IsShift"/> <function name="getMostLeftArg" class="com.klocwork.plug-ins.GetMostLeftArg"/> </plugin>
KAST 式をテストする
カスタム関数を含む KAST 式は、kwjava を使用してテストする必要があります。Checker Studio はカスタム関数をサポートしていません。
関数を含むライブラリの名前を指定するには、--xpath-library オプションを使用します。
下の例では、KAST 式とライブラリ名を含むテキストファイルを指定します。
kwjava --xpath-file myJKAST.txt --xpath-library "myJKASTCustomFunctions.so" Testcase.java
チェッカーをビルドする
チェッカーディレクトリ (<CHECKER.CODE>
) からチェッカーライブラリをビルドするには、以下を実行します。
ant install
これにより <CHECKER.CODE>.zip
ファイルが生成されます。
デスクトップテスト
生成された jar は <User_install>/plugins
ディレクトリに配置します。この jar は、正式に展開する前に、このディレクトリでローカルにテストできます。
次は何?
これでチェッカーを Klocwork サーバーに展開できます。その場合、Klocwork connected desktop (コネクテッドデスクトップ) はすべて、サーバーと同期するとチェッカーを使用できるようになります。また、個々のデスクトップインストールに展開することもできます。
この方法については、以下を参照してください。カスタムチェッカーの展開。