WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 7 部分:Quick Assistant

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 清单1. 错误的语法,变量 b 未声明a=3;a=b;a 被赋值了两次,基于 JFace Text Framework 构建全功能代码编辑器: 第 7 部分:Quick Assistant(2),第一次是用常量,第二次是把变量b的值赋给变量a,因为有了底层支持,这个过程很简单,如果根据目前的解析

清单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 中为每个未声明的变量创建了这个类型的标注,因为有了底层支持,这个过程很简单,就不贴出代码了。我们看看实际的效果:

上一页  1 2 3 4 5  下一页

Tags:基于 JFace Text

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接