基于 JFace Text Framework 构建全功能代码编辑器: 第 9 部分:Template
2010-03-18 00:00:00 来源:WEB开发网查看原图(大图)
TemplateStore
我们需要一些方法,可以得到 TemplateStore,一般来讲,可以把这些方法放到插件的入口类中,因为一个插件只需要一个 TemplateStore。所以在本例中,我放到了 jtf.tutorial.Activator 里面。你可以看到两个新增的方法:getTemplateStore和getContextTypeRegistry。我使用了 ContributionTemplateStore,因为我需要装载用户自定义的模版。ContextTypeRegistry 的作用很好理解,因为同时可能存在多种模版类型,Eclipse需要把每类模版的相关信息管理起来,因此把模版上下文注册到了 ContextTypeRegistry 中。
添加属性页
因为我要支持用户自定义模版,所以需要添加一个模版属性页。只要继承 TemplatePreferencePage 并添加 org.eclipse.ui.preferencePages 扩展即可。在此不赘述了。
添加到内容提示
到上一步为止,设置对话框中也出现了我的属性页,用户可以自定义模版了。但是模版没有任何用武之地,还需要将模版添加到内容提示中才有意义。内容提示是由一个个 Proposal 组成的,对于模版,也有对应的 Proposal 实现:TemplateProposal。所以,接下来修改 ExprContentAssistProcessor,插入这么一段代码:
清单3. 修改 ExprContentAssistProcessor 以支持模版
// get template context type
TemplateContextType contextType = Activator.getDefault().
getContextTypeRegistry().getContextType(Activator.EXPR_CONTEXT_TYPE);
// create template context
TemplateContext context = new DocumentTemplateContext(contextType, doc, offset, 0);
// get all template
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
Template[] templates = Activator.getDefault().
getTemplateStore().getTemplates(Activator.EXPR_CONTEXT_TYPE);
for(Template t : templates) {
proposals.add(new TemplateProposal(t, context, new Region(offset ,0), null));
}
更多精彩
赞助商链接