Web Tools Platform (WTP) 是 Eclipse 生態中 J2EE 開發的基石,眾多商業 IDE(MyEclipse、RAD、JBoss Tools)均基於 WTP 進行二次封裝。本系列從插件開發者視角,以「自定義 JSP 編輯器」為實戰載體,系統講解 WTP 結構化文檔模型(SDM)、結構化文本編輯器、內容助手、驗證器、超鏈接檢測等核心擴展點的定制實現。首篇建立整體認知框架。
WTP = WST (Web Standard Tools) + JST (J2EE Standard Tools)
├── WST: 通用 Web 技術支援 (HTML, CSS, JavaScript, XML, JSP, WS...)
│ ├── SSE (Structured Source Editing) 結構化源碼編輯框架 — 核心
│ │ ├── Structured Document Model (DOM) — 語法層樹狀模型
│ │ ├── Structured Model — 語義層模型 (XML DOM, CSS OM)
│ │ ├── StructuredTextEditor — 編輯器基類
│ │ ├── Content Assist / Validation / Hyperlink / Formatter — 功能擴展點
│ │ └── Partitioning / Reconciling — 增量解析協調機制
│ └── Server Tools, Browser Tools, ...
└── JST: J2EE 專用擴展 (JSP, Servlet, EJB, JPA, JSF, Facelets...)
| 篇章 | 核心主題 | 關鍵接口/類 | 實戰產出 |
|---|---|---|---|
| 一 | WTP 整體介紹、SSE 架構、開發環境搭建 | IEditorPart, IDocumentProvider, SourceViewerConfiguration | 可運行的空白 JSP 編輯器插件 |
| 二 | Structured Document (IStructuredDocument) — 語法樹模型 | IStructuredDocument, ITextRegion, Node, Composite Pattern | Document 結構分析視圖插件 |
| 三 | Structured Model (IStructuredModel) — 語義模型與 XML DOM | IStructuredModel, IDOMDocument, ModelManager, ModelBuilder | Model 結構分析視圖插件 |
| 四 | StructuredTextEditor 定制:資源定位、內容助手、驗證器 | ISourceViewer, IContentAssistant, IValidator, IHyperlinkDetector | 具備智能提示、實時校驗的 JSP 編輯器 |
| 五 | 進階定制:Auto Edit Strategy、折疊、標記、重構 | IAutoEditStrategy, IProjectionListener, IQuickFixProcessor | 生產級編輯器體驗 |
| 六 | WTP 進階:分區協調、模型同步、性能優化、測試 | IDocumentPartitioner, IReconciler, ModelSynchronizer | 穩健的插件發布包 |
WTP 編輯器建立在 JFace Text 之上,三大核心角色:
- 文檔分區器 (IDocumentPartitioner) — 如 JSP 分區:HTML, JSP_SCRIPTLET, JSP_EXPRESSION, JSP_DIRECTIVE, JSP_COMMENT
- 內容助手 (IContentAssistant) — 完成提示、參數提示、信息悬停
- 驗證器 (IAnnotationModel + IValidator) — 實時錯誤/警告標記
- 超鏈接檢測器 (IHyperlinkDetector) — Ctrl+Click 跳轉
- 格式化器 (IContentFormatter) — 代碼格式化
- 自動編輯策略 (IAutoEditStrategy) — 括號補全、引號閉合、智能縮進
- 摺疊提供者 (IProjectionListener) — 代碼折疊
- 雙擊選擇策略 — 詞元選擇邏輯
<extension point="org.eclipse.ui.editors">
<editor
class="com.example.jsp.editor.JSPEditor"
contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
default="true"
extensions="jsp,jspf"
icon="icons/jsp_editor.gif"
id="com.example.jsp.editor.JSPEditor"
name="Custom JSP Editor">
</editor>
</extension>
public class JSPEditor extends StructuredTextEditor {
public JSPEditor() {
super();
setSourceViewerConfiguration(new JSPConfiguration()); // 關鍵:注入配置
setDocumentProvider(new JSPDocumentProvider()); // 可選:自定義文檔提供者
}
}
所有高級功能(內容助手、驗證、超鏈接、重構)的實現,**本質上都是對 Document (語法樹) 或 Model (語義樹) 的遍歷、查詢、修改**。不熟悉數據模型結構,任何定制都是盲人摸象。下兩篇將分別深入剖析 `IStructuredDocument` 與 `IStructuredModel`。