EN JP CN

Java カスタム関数

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 に含まれるすべてのカスタム関数を登録します。

注: KAST 式でデフォルトの関数名 ("myFunc")、および MyFunc.java で指定されたクラス ("MyFunc") を使用する場合は、plugin_functions.xml ファイルでこれらの値を更新する必要はありません。

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 (コネクテッドデスクトップ) はすべて、サーバーと同期するとチェッカーを使用できるようになります。また、個々のデスクトップインストールに展開することもできます。

この方法については、以下を参照してください。