對 Java 程式碼執行程式碼輔助

JDT API 可讓其他外掛程式對某些 Java 元素執行程式碼輔助或程式碼選取。 容許這項操作的元素應該實作 ICodeAssist

運用方式有下列兩種:

在 Java 模型中,有兩個元素會實作這個介面:IClassFileICompilationUnit。 如果類別檔具有附加的程式檔,程式碼完成和程式碼選擇僅回答類別檔的結果。

程式碼完成

執行程式碼完成

以程式設計方式來執行程式碼完成的唯一做法是, 呼叫 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) {
   }

如果您在 fooMethod 的第一個字元之後,指定一個偏移, 而且指定長度為 0,將計算選擇以包括整個記號 fooMethod。 如果您指定長度改為 5,選擇將視為 ooMet