前面章節著重於 StructuredTextEditor 框架與 WTP 資料模型,本節將實作開發者最常用的功能——自動提示(Content Assist)。
關於 Eclipse 文本編輯器框架、JFace Text Framework 與 WTP StructuredTextEditor 的基礎知識,請參考系列第二章:基於 WTP StructuredTextEditor 創建自己的 JSPEditor。
若要對 ISourceViewer 進行自動提示策略客製化,需在其對應的 SourceViewerConfiguration 中配置。對於 WTP JSP StructuredTextEditor,ISourceViewer 即 StructuredTextViewer,配置類為 StructuredTextViewerConfigurationJSP。以下摘錄其核心邏輯:
protected IContentAssistProcessor[] getContentAssistProcessors(ISourceViewer sourceViewer, String partitionType) {
IContentAssistProcessor[] processors = null;
// 其他代碼省略......
else if ((partitionType == IXMLPartitions.XML_DEFAULT)
|| (partitionType == IHTMLPartitions.HTML_DEFAULT)
|| (partitionType == IHTMLPartitions.HTML_COMMENT)
|| (partitionType == IJSPPartitions.JSP_DEFAULT)
|| (partitionType == IJSPPartitions.JSP_DIRECTIVE)
|| (partitionType == IJSPPartitions.JSP_CONTENT_DELIMITER)
|| (partitionType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT)
|| (partitionType == IJSPPartitions.JSP_COMMENT)) {
// JSP 相關分區
processors = new IContentAssistProcessor[]{new JSPContentAssistProcessor()};
}
else if ((partitionType == IXMLPartitions.XML_CDATA)
|| (partitionType == IJSPPartitions.JSP_CONTENT_JAVA)) {
// JSP Java 程式碼分區
processors = new IContentAssistProcessor[]{new JSPJavaContentAssistProcessor()};
}
// 其他代碼省略......
return processors;
}
由此可見,IContentAssistProcessor 與具體分區類型(partition type)強相關。要深入理解,必須搞清楚分區類型是如何計算得出的(分區類型屬於 JFace Text Framework 概念,有興趣可自行深入)。