您的外掛程式可使用 JDT API 來建立類別或介面、新增方法至現存的類型、或改變 類型的方法。
改變 Java 物件最簡單的方法就是使用 Java 元素 API。 尚有更多一般技術可用於一個 Java 元素的原始碼。
以程式設計的方式產生一個編譯單元最簡單的方法就是使用 IPackageFragment.createCompilationUnit。您要指定編譯單元的名稱和內 容。 編譯單元將建立於套件內,且會傳回新的 ICompilationUnit。
一般可在對應於套件目錄的適當資料夾中建立一個檔案資源來建立編譯單元,檔案資源 的副檔名是 ".java"。使用通用資源 API 是 Java 工具的 "幕後" 作業,所以在通用資源變更接聽器被通知且 JDT 接聽器以新的 編譯單元來更新 Java 模型之前,Java 模型不會更新。
對於 Java 原始檔的簡單修正,大多可使用 Java 元素 API 來完成。
例如,您可從編譯單元來查詢類型。您一旦知道 IType ,就可使用通信協定,例如 createField、createInitializer、 createMethod 或 createType,將原始碼成員新增至類型。 原始碼及關於成員位置的資訊是在這些方法中提供。
ISourceManipulation 介面定義 Java 元素的共用原始檔操作。 這包含重新命名、移動、複製或刪除類型成員的方法。
Java 元素 API 不提供某些原始碼修正。編輯原始碼(例如變更現存元素的原始碼) 有一個更普通的方法,就是使用編譯單元的原始碼和 Java DOM。
這些技術包括:
// 取得編譯單元的原始檔
String contents = myCompilationUnit.getBuffer().getContents();
// 建立可編輯的 JDOM
myJDOM = new DOMFactory();
myDOMCompilationUnit = myJDOM.createCompilationUnit(contents, "MyClass");
// 如要導覽和編輯編譯單元結構,則使用
// JDOM 節點通信協定。
...
// 一旦對所有節點完成修改,
// 則從編譯單元 DOM 節點取回原始檔。
String newContents = myDOMCompilationUnit.getContents();
// 將此程式碼設回編譯單元元素
myCompilationUnit.getBuffer().setContents(newContents);
// 將緩衝區儲存到檔案。
myCompilationUnit.save();
此技術可能導致問題標示元與不正確的行號建立關聯,因為 Java 元素並未直接更新 。
Java 元素模型的精細程度不超過方法和欄位。編譯程式使用的抽象語法樹狀結構 (AST) 並未提供 API 的用法,所以 JDT 用來將原始碼剖析成計劃性結構的技術目前尚 無 API 的用法。
如果您的外掛程式需要知道 Java 元素在形成之後的變動,您可將一個 Java IElementChangedListener 登錄到 JavaCore。
JavaCore.addElementChangedListener(new MyJavaElementChangeReporter());.
Java 元素變更接聽器的概念類似資源變更接聽器(說明於 追蹤資源變更)。下列片段實作一個 Java 元素變更報告器,可列印元素差距到 系統主控台。
public class MyJavaElementChangeReporter implements
IElementChangedListener {
public void elementChanged(ElementChangedEvent event) {
IJavaElementDelta delta=
event.getDelta();
if (delta != null) {
System.out.println("delta received: ");
System.out.print(delta);
}
}
)
IJavaElementDelta 包含已變更的元素及說明變更類型的旗號。