JDT API は、他のプラグインが、いくつかの Java エレメントに対して codeassist または codeselect を実行することを可能にします。 この操作を許可するエレメントは ICodeAssist をインプリメントします。 Java モデルには、このインターフェースをインプリメントする 2 つのエレメント、 IClassFile および ICompilationUnit があります。
操作には次の 2 種類があります。
注意: 完了および選択応答は、クラス・ファイルに添付ソースがある場合にのみ、クラス・ファイルの結果として生じます。
プログラマチックにコード完了を実行するには、 ICodeAssist.codeComplete を使用するのが唯一の方法です。 単位内の完了の位置を指定して、可能な完了を受け入れる ICompletionRequestor のインスタンスを提供します。
各種のプロポーザルが要求発行者のメソッドによって受け入れられます。 これらのメソッドのパラメーターは、現行コンテキスト内のプロポーザルの相関だけでなく、エレメント (名前、パラメーター、宣言型...) とその位置を記述します。
すべての種類の結果を知る必要がないときは、
CompletionRequestorAdapter
を使用した簡単な方法でコード完了を実行できます。
// Get the compilation unit
ICompilationUnit unit = ...;
// Get the offset
int offset = ...;
// Create the requestor
ICompletionRequestor requestor = new CompletionRequestorAdapter() {
public void acceptClass(
char[] packageName,
char[] className,
char[] completionName,
int modifiers,
int completionStart,
int completionEnd,
int relevance) {
System.out.println("propose a class named " + new String(className));
}
};
// Compute proposals
unit.codeComplete(offset, requestor);
コード完了のオプションは他のプラグインによって変更できます。 JDT コア・オプションを変更して、完了の動作を変更することが可能です。
オプションには次の 2 つがあります。
JDT コア・オプションを変更する方法については、 JDT コア・オプションとは? を参照してください。
プログラマチックにコード選択を実行したい場合、使用するメソッドは
ICodeAssist.codeSelect
です。
このメソッドは、選択の開始位置と長さを認識している必要があります。
結果は、Java エレメントの配列になります。
多くの場合、配列内のエレメントは 1 つのみですが、選択があいまいな場合は、考えられるすべてのエレメントが戻されます。
// Get the compilation unit
ICompilationUnit unit = ...;
// Get the offset and length
int offset = ...;
int length = ...;
// perform selection
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
選択の長さが 0 の場合、完了エンクロージング・トークンを使用して選択が計算されます。
public void fooMethod(Object) { }オフセットが fooMethod の先頭文字の後にあり、長さが 0 のとき、選択は fooMethod です。 ただし、長さが 5 の場合、選択は ooMet です。