エラー・パーサーの仕事は、コンパイラーやビルド・ツールの出力にある警告、エラー、および他の重要なメッセージを認識し、 それらに対して「問題マーカー」オブジェクトを作成することです。 「プロジェクト・エクスプローラー」ビュー、「問題」ビュー、およびエディターでは、 問題マーカーは Eclipse によってエラー・アイコンまたは警告アイコンとして表示されます。

IBM Rational Developer for Power Systems Software は、現在サポートされていないビルド・ツールやコンパイラーが使用されている場合、 ビルド・エラーを認識できないことがあります。 このような場合は、ご使用のビルド・ツールとうまく統合するような独自のエラー・パーサー・プラグインを作成することを検討してみてください。
最初のステップでは、プラグインを作成するための環境をセットアップします。 これについては、『プラグインによる拡張』のセクションで説明します。 環境がセットアップされたら、以下のチュートリアルに進んでください。 このチュートリアルは、エラー・パーサーの作成方法について説明しています。
「ファイル」>「新規」>「プロジェクト」の順に選択すると、「新規プロジェクト」ウィザード選択ダイアログが開きます。 このダイアログで「プラグイン・プロジェクト」を選択して「次へ」をクリックします。

プロジェクトに名前を付けます。 通常、プラグイン名は、Java パッケージに類似した命名規則に従います。
「ターゲット・プラットフォーム」セクションで、Eclipse バージョン 3.4 が選択されていることを確認します。 現在、IBM Rational Developer for Power Systems Software は、この Eclipse バージョンに基づいています。 これより高いバージョンは機能しません。

「次へ」をクリックして、ウィザードの 2 ページ目に進みます。
ウィザードの 2 ページ目で、「このプラグインを UI に追加」と書いてあるチェック・ボックスのチェック・マークを外します。 このチュートリアルでは、ユーザー・インターフェース・コンポーネントを開発しません。
「アクティベーターの生成 (generate an activator)」と書いてあるチェック・ボックスのチェック・マークは付けたままにすることを 検討してください。 これにより、プラグイン・ライフサイクル・イベントに応答するために使用されるアクティベーター・クラスが生成されます。 このチュートリアルでは、実際に、このイベントに応答する必要はありません。 ただし、通常、多くの重要なプラグインは、このイベントに応答する必要があります。 そのため、この時点で必要なくても、このクラスを生成しておくことをお勧めします。

「終了」をクリックします。
「パッケージ・エクスプローラー」で、新しく作成されたプロジェクトに移動し、META-INF フォルダーを 開き、MANIFEST.MF ファイルをダブルクリックします。

これにより、プラグインのメタデータの構成に使用されるプラグイン・マニフェスト・エディターが開きます。 エディターの下部にある「依存」タブをクリックします。

エラー・パーサーの作成に必要な API にアクセスするには、2 つのプラグイン依存関係を追加する必要があります。 最初に、「必須プラグイン」の下にある「追加」ボタンをクリックします。 「プラグインの選択」ダイアログが開きます。 フィルター・ボックスに org.eclipse.cdt.core と入力し、このプラグインを選択して、「OK」をクリックします。 このプロセスをもう一度繰り返して、org.eclipse.core.resources プラグインを追加します。

これらの必須プラグインが以下のように表示されます。 変更内容を保存します。

次に、エラー・パーサーのコードを含む Java クラスを作成します。 「パッケージ・エクスプローラー」で「src」フォルダーを展開します。 自動的に作成された Java パッケージがあります。 パッケージを右クリックして、「新規」>「クラス」を選択します。

これにより、「新規 Java クラス」ウィザードが開きます。 クラスに「MyErrorParser」などの名前を付けます。

インターフェース・セクションの横にある「追加」ボタンをクリックします。 「実装されたインターフェースの選択」ダイアログが開きます。 フィルター・ボックスに「IErrorParser」と入力し、IErrorParser インターフェースを選択します。

「終了」をクリックします。 processLine() メソッドのスタブ実装を持つエラー・パーサーの新規クラスが作成されます。

コードを作成する前に、新しいエラー・パーサーが IBM Rational Developer for Power Systems Software によって認識されていることを 確認します。 プラグイン・マニフェスト・エディターを再び開き、下部にある「拡張」タブをクリックします。

「追加」ボタンをクリックして「新規拡張」ダイアログを開きます。 org.eclipse.cdt.core.ErrorParser 拡張ポイントを選択して「終了」をクリックします。

org.eclipse.cdt.core.ErrorParser 拡張が「すべての拡張」セクションの下に表示されます。

下部にある「plugin.xml」タブをクリックして、エディターで plugin.xml ファイルを開きます。 ファイルを編集して、ファイルの本文を次のようにします。
<plugin>
<extension
id="org.mycompany.errorparser.MyErrorParser"
name="Test Error Parser"
point="org.eclipse.cdt.core.ErrorParser">
<errorparser
class="org.mycompany.errorparser.MyErrorParser">
</errorparser>
</extension>
</plugin>
<errorparser> 要素のクラス属性には、IErrorParser インターフェースを実装するクラスの完全修飾名が含まれていなければなりません。
この時点で、新しいエラー・パーサーが IBM Rational Developer for Power Systems Software に 認識されていることをテストすることをお勧めします。 『プラグインによる拡張』のセクションで作成した実行構成を 使用して IBM Rational Developer for Power Systems Software を起動します。 IBM Rational Developer for Power Systems Software で「リモート C/C++」パースペクティブに切り替えます。 ワークスペースにプロジェクトをまだ作成していない場合は作成します。
プロジェクトを右クリックし、プロジェクト・プロパティーを開きます。 「C/C++ ビルド」>「設定」にナビゲートします。 新しいエラー・パーサーが「エラー・パーサー」タブの下にリストされています。 このエラー・パーサーの横にあるチェック・ボックスをクリックして、このエラー・パーサーを使用可能にし、 このエラー・パーサーを先頭に移動して、このエラー・パーサーが他のエラー・パーサーより優先されるようにします。 また、開発している間は他のエラー・パーサーをすべて使用不可にすることをお勧めします。 「OK」をクリックします。

次に、エラー・パーサーのコードの作成を実際に開始します。
ビルドのたびに、ビルド・コマンドの出力が、一度に 1 行ずつ次々とエラー・パーサーに送られます。 processLine() メソッドが出力の行ごとに 1 回呼び出され、2 つの 引数 (出力の行を含むストリングと、ErrorParserManager への参照) が渡されます。 このマネージャー・オブジェクトには、問題マーカー・オブジェクトの作成に役立ついくつかの便利メソッドがあります。
通常のパターンでは、各行をコンパイラーの警告メッセージまたはエラー・メッセージとして認識するようにします。 これを行うための良い方法は、行を正規表現と突き合わせ、取り込み領域を使用して 行の中の関心のある部分 (ファイル名、行番号、エラー・メッセージなど) を抽出することです。
実際、エラー・パーサーの作成方法は、ユーザーが使用しているビルド・ツールおよびコンパイラーによって異なります。 IBM の XLC コンパイラーからのエラー・メッセージを認識する実装例を以下に示します。
package org.mycompany.errorparser;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.ErrorParserManager;
import org.eclipse.cdt.core.IErrorParser;
import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.core.resources.IResource;
public class MyErrorParser implements IErrorParser {
static String regexp = "¥"((?:¥¥w|¥¥.)+)¥", line (¥¥d+)¥¥.¥¥d+: (.*)";
static Pattern errorPattern = Pattern.compile(regexp);
public boolean processLine(String line, ErrorParserManager manager) {
Matcher matcher = errorPattern.matcher(line);
if(!matcher.matches())
return false;
String fileName = matcher.group(1);
int lineNumber = Integer.parseInt(matcher.group(2));
String message = matcher.group(3);
IResource resource = manager.findFileName(fileName);
if(resource == null)
resource = manager.findFilePath(fileName);
if(resource == null)
resource = manager.getProject(); // file not found in workspace, attach problem to project
// create a problem marker that will show up in the problems view
int severity = IMarkerGenerator.SEVERITY_ERROR_RESOURCE;
manager.generateMarker(resource, lineNumber, message, severity, null);
return true;
}
}
最初に行を正規表現と突き合わせます。 一致しない場合は false が返されます。 これにより、このエラー・パーサーによってこの行が認識されなかったことが ErrorParserManager に伝わります。 この場合、この行は ErrorParserManager によって次のエラー・パーサーに順々に送られます。
行が一致する場合、エラー・パーサーの仕事は、Eclipse によってユーザーに表示される「問題マーカー」を作成することです。 この例では、関連情報を行から抽出するために取り込みグループが使用されます。 正規表現および取り込みグループについて詳しくは、java.util.regex.Pattern クラスの Javadoc を参照してください。 また、正規表現を使用しない場合は、java.util.StringTokenizer クラスと同様に、ストリングの解析に役立ついくつかの メソッドが String クラスに含まれています。
次のステップでは、エラー・メッセージ内のファイル名と一致する IResource を見つけます。 IResource オブジェクトは、Eclipse ワークスペース内のファイルまたはディレクトリーを表します。 (詳しくは、org.eclipse.core.resources.IResource インターフェースの Javadoc を参照してください。) ErrorParserManager には、ファイル名を IResource オブジェクトに変換する場合に役立ついくつかのメソッドがあります。 ファイル名に一致する IResouce が見つからない場合は、デフォルトでプロジェクト自体を使用することができます。
この情報が計算されると、generateMarker() メソッドにより問題マーカー・オブジェクトが作成されます。 org.eclipse.cdt.core.IMargerGenerator インターフェースには、さまざまな重大度レベルを表す定数が含まれています。 この例では、エラー・パーサーで生成されるのは、重大度がエラーとなっているマーカーのみです。 ただし、実際のエラー・パーサーでは、警告マーカーや情報マーカーも生成されることがあります。
実際にカスタム・エラー・パーサーを開発するときは、Eclipse デバッガーで IBM Rational Developer for Power Systems Software を 実行することがたいへん便利だとわかることがあります。 Eclipse デバッガーは、クラス・ファイルを「ホット・スワップ」できます。 つまり、エラー・パーサー・コードの変更が可能であり、その変更を有効にするためにデバッガーを再始動する必要がありません。 ファイルを変更して保存すると、Eclipse が自動的にコードを再コンパイルして、 新しいバージョンのクラス・ファイルを IBM Rational Developer for Power Systems Software の実行中のインスタンスにロードします。
エラー・パーサーによって問題マーカーが正しく生成されている場合、問題マーカーは、「プロジェクト・エクスプローラー」ビュー、 「問題」ビュー、およびエディター自体に表示されます。

エラー・パーサーが完全であることを確信したら、今度はプラグインをビルドして配布します。 実際、このプロセスは非常に簡単です。 プロジェクトを右クリックして、「エクスポート」を選択します。 次に、エクスポート・ウィザードで「プラグイン開発」>「デプロイ可能なプラグインおよびフラグメント」を選択して、「次へ」をクリックします。

ウィザードの 2 ページ目でプラグインを選択してエクスポート先を選択し、「終了」をクリックします。

選択したロケーションに plugins という名前のフォルダーが作成されています。 このフォルダーには、プラグインを含む jar ファイルが入っています。 このファイルを、IBM Rational Developer for Power Systems Software インストール済み環境の SDPShared フォルダーの 下にある plugins フォルダーにコピーして、通常どおりに起動します。 最後のステップでは、プロジェクト・プロパティー内でエラー・パーサーを使用可能にします。

これで、カスタム・ビルド・ツールの出力が IBM Rational Developer for Power Systems Software によって認識されるようになりました。