JDT API は、他のプラグインがいくつかの Java 要素に対してコード・アシストまたはコード選択を行うことができるようにします。 この操作を許可する要素は ICodeAssist を実装します。
操作には次の 2 種類があります。
Java モデルには、このインターフェースを実装する 2 つの要素、 IClassFile および ICompilationUnit があります。 コード完了とコード選択は、クラス・ファイルに添付ソースがある場合にのみ、 クラス・ファイルの結果として生じます。
プログラマチックにコーディング・コンプリート機能を実行する 1 つの方法は、ICodeAssist.codeComplete を呼び出すことです。コンパイル単位において、コーディング・コンプリート機能を実行したいオフセット (そのオフセット以降、機能を実行します) を指定します。 また、可能なコンプリート機能を受け入れるために、 CompletionRequestor のインスタンスも指定する必要があります。
CompletionRequestor.accept のメソッドは、コーディング・コンプリート機能のすべての種類のプロポーザルを受け入れます。 CompletionProposal の各メソッドは、提案された要素 (その名前、宣言型など)、コンパイル単位における提案された挿入位置、およびその相関を記述する情報を提供します。
コンプリート機能要求者は、さまざまな種類のコンプリート機能を受け入れることができます。 この種類は、CompletionProposal.getKind によって提供されます。
可能なコンプリート機能の種類には次のものがあります (可能なコンプリート機能の種類の完全なリストは、『 CompletionProposal』で確認できます)。
完了要求発行者は、コンパイル・エラーも受け入れ可能でなければなりません。
多くのさまざまな完了がある可能性があるため、相関という概念を使用して、 提案された完了とその他のプロポーザルの相関を比較します。 相関は正の整数によって表されます。 他のプロポーザルの値に相対的に使用されるということを除いて、値には暗黙的な意味はありません。 コード完了候補の相関は、変数型、キャスト型、戻りの型など、 周りのコードの型に関連付けられるときに、式の期待される型によって影響を受けることがあります。 期待される接頭部または接尾部が完了に存在する場合、これも相関に影響を与えます。
JDT コア・プラグインは、コード完了の振る舞いを制御するオプションを定義します。 これらのオプションは、他のプラグインによって変更できます。
その他のオプションを使用して、フィールド、static フィールド、ローカル変数、 およびメソッド引数用に提案された完了名に接頭部および接尾部を指定することができます。
コード・アシスト・オプションとそのデフォルトについて詳しくは、『JDT コア・コード・アシスト・オプション』を参照してください。
コード選択は、コンパイル単位でのテキストの範囲 (一般に、選択されたテキスト) で表される Java 要素を見つけるために使用します。 コード選択をプログラマチックに実行するには、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) {
}