基于 JFace Text Framework 构建全功能代码编辑器: 第 7 部分:Quick Assistant
2010-03-18 00:00:00 来源:WEB开发网这段代码和内容提示中的很相似,不同点是这里会去取得当前光标处的标注,然后用 canFix 方法检查标注是否可以被修正。最后,还是返回一个 Proposal 的数组。
配置
最后一步,几乎是把 ExprConfiguration 的 getContentAssistant 方法复制了一遍,只不过那些接口换成了快速帮助的。大家可以对比一下 getQuickAssistAssistant 和 getContentAssistant 有什么不同。提醒大家注意一下:快速帮助并没有和文本类型绑定在一起。这是合理的,因为快速帮助一般是用来修正错误的,在一个错误的源代码里面,可能很难知道某个地方到底应该是什么样的文本类型,因此根据文本类型来注册快速帮助功能是有问题的。除了不同点,看到更多的应该是共同点,比如相似的 Assistant/Processor 结构,相似的信息显示控件。注意,又是信息显示控件,到现在为止,已经有内容提示,快速帮助,文本悬浮和标注悬浮都使用了它。
快捷键处理
在 Eclipse 里面,触发快速帮助的缺省快捷键是 Ctrl+1,和内容提示一样,需要给快速帮助安装一个快捷键处理器,由于我已经在演示内容提示的时候打完了基础,现在只要改改 ExprViewer 的 createHandlers,添加一个 handler 就可以了。
效果
当你将光标放在未声明变量上,再按 Ctrl+1 时,可以看到弹出的框里面列出了所有声明过的变量,选择一个之后,未声明的变量会被替换。如下图所示:
图4. 快速帮助效果图
查看原图(大图)
读者可以尝试修正一下其它类型的错误,不会有反应,因为 ExprQuickAssistProcessor 里面只接受“未声明变量”这个标注类型
结束语
我没有实现 IQuickAssistInvocationContext 接口,如果是像 Java 编辑器这样复杂的应用,那就很可能需要了,大家可以想想,如何利用好这个接口。本文还提到了在 Problem 视图中有 Quick Fix 的菜单项,大家不妨尝试将编辑器中的错误添加到 Problem 视图中,然后使用快速帮助功能。
本文示例源代码或素材下载
更多精彩
赞助商链接