基于 JFace Text Framework 构建全功能代码编辑器: 第 7 部分:Quick Assistant
2010-03-18 00:00:00 来源:WEB开发网清单1. 错误的语法,变量 b 未声明
a = 3;
a = b;
a 被赋值了两次,第一次是用常量,第二次是把变量b的值赋给变量a。如果根据目前的解析器文法来说,这段代码的语法没有问题,但是语义有问题,因为 b 没有声明过。
对于这种新的错误类型,我会认为用户也许是敲错了变量名,所以会显示出声明过的变量名列表,如果用户选择了一个,则未声明的变量被替换成声明过的变量。对于原来的错误,我不提供快速帮助,这样大家就可以看出差别了。
实现底层支持
要增加错误类型,又需要修改解析器文法,我已经完成这部分,所有未声明的变量都被保存到了一个列表里面。同样,又增强了 SharedParser 以便得到这些未声明的变量。
添加标注类型
我不能还是使用 org.eclipse.ui.workbench.texteditor.error 这样的标注类型,需要有所区别才行。所以我通过 org.eclipse.ui.editors.annotationTypes 扩展点添加了一个标注类型,它的父类还是 org.eclipse.ui.workbench.texteditor.error,这样的话它就可以继承父类的一些设置,不用我去创建 AnnotationPreference 了。扩展的声明如下:
清单2. 错误的语法,变量 b 未声明
<extension
point="org.eclipse.ui.editors.annotationTypes">
<type
name="jtf.tutorial.annotation.undeclared.variable"
super="org.eclipse.ui.workbench.texteditor.error">
</type>
</extension>
然后我在 SyntaxChecker 中为每个未声明的变量创建了这个类型的标注,因为有了底层支持,这个过程很简单,就不贴出代码了。我们看看实际的效果:
更多精彩
赞助商链接