JDT API 可讓其他外掛程式對某些 Java 元素執行程式碼輔助或程式碼選取。 容許這項操作的元素應該實作 ICodeAssist。
運用方式有下列兩種:
在 Java 模型中,有兩個元素會實作這個介面:IClassFile 與 ICompilationUnit。 如果類別檔具有附加的程式檔,程式碼完成和程式碼選擇僅回答類別檔的結果。
以程式設計方式來執行程式碼完成的唯一做法是, 呼叫 ICodeAssist.codeComplete。 您在編譯單元中指定偏移,指出在這個偏移之後的程式碼完成是想要的。 您也須提供 ICompletionRequestor 的實例,才能接受可能的完成。
ICompletionRequestor 中的每一種方法都接受針對程式碼完成提出的不同種類提議。 每一種方法的參數都包括說明已提議的元素的文字(它的名稱、宣告類型等)、在編譯單元中插入它的提議位置,以及它的相關性。
完成要求端可以接受許多不同的完成類型,包括插入下列元素:
完成要求端也必須能夠接受編譯錯誤。
如果您的外掛程式並未對每一種類的程式碼完成感到興趣,則可以使用 CompletionRequestorAdapter, 以便您僅需要實作您感興趣的完成種類。下列範例顯示僅用來接受類別完成的配接器。
// 取得編譯單元 ICompilationUnit unit = ...; // 取得偏移 int offset = ...; // 建立要求端 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 核心」外掛程式定義用來控制程式碼完成行為的選項。 其他外掛程式可以變更這些選項。
其他選項可讓您指定字首和字尾給提議的完成名稱,代表欄位、 static 欄位、區域變數,以及方法引數。
如果需要程式碼輔助選項及其預設值的詳細資訊,請參閱 JDT 核心程式碼輔助選項。
程式碼選擇是用來在編譯單元中尋找以文字範圍(通常是選取的文字)代表的 Java 元素。 如果要以程式化的方式執行程式碼選擇,您必須呼叫 ICodeAssist.codeSelect。 您必須提供選擇的起始索引位置及其長度。 結果為 Java 元素的陣列。通常陣列中只有一個元素,但是如果選擇模糊不清,則會傳回所有可能的元素。
在底下範例中,程式碼選取是針對編譯單元呼叫的。
// 取得編譯單元
ICompilationUnit unit = ...;
// 取得偏移和長度
int offset = ...;
int length = ...;
// 執行選取
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
當選擇長度指定為 0 時,將尋找含括指定的偏移的完成記號,來計算選擇。 請考慮下列範例方法:
public void fooMethod(Object) {
}