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

基于 JFace Text Framework 构建全功能代码编辑器: 第 5 部分:Text Decoration

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 我只列出了这个最关键的方法,它的基本流程是:做一些必要的检查得到之前已经存在的错误标注解析源代码,基于 JFace Text Framework 构建全功能代码编辑器: 第 5 部分:Text Decoration(6),得到错误列表为每个错误创建一个 ExprAnnotation,并把标注类型

我只列出了这个最关键的方法。它的基本流程是:

做一些必要的检查

得到之前已经存在的错误标注

解析源代码,得到错误列表

为每个错误创建一个 ExprAnnotation,并把标注类型设为错误类型

通过 replaceAnnotations 批量刷新标注

需要解释一下的是第 5 步,为什么要用 replaceAnnotations?主要还是出于性能的考虑,因为你每次添加删除一个标注,都会触发一系列的连锁反应,所以如果你一个个的添加删除,速度会非常慢。replaceAnnotations 解决了这个问题,因为它是一次全部替换。但是这个方法是 IAnnotationModelExtension 接口里面的,为了保险起见,需要先检查类型。当然我们这个例子很简单,并没有显著的性能问题。

效果

下面是运行后的效果,假如我没有输入分号,错误的标注就显示出来了。

图2. 文本装饰效果图
基于 JFace Text Framework 构建全功能代码编辑器: 第 5 部分:Text Decoration

结束语

让我来指出还是做的不够的地方吧:

错误检测太过简单,比如不能标注出未声明的变量。要做一个专业的代码编辑器的话,错误检测可不能这样简单。

语法检查是在文本内容发生变化后立刻触发,当源代码越来越多的时候,这很可能造成性能问题。我们可以从很多方面想办法,比如提高语法解析器的效率,或者减少不必要的语法检查次数,可以考虑用定时器,当用户隔一段时间没有输入动作时再进行语法检查。最好的办法是使用 Reconciler,关于 Reconciler 的概念会在本系列的第 11 部分中提到。

我没有自定义标注类型,用的是 Eclipse 自带的类型。那么不妨尝试一下定义自己的标注类型,可以通过 org.eclipse.ui.editors.annotationTypes 扩展点。

我也没有自定义标注的渲染方式,用 IDrawingStrategy 尝试画一个很酷的标注吧。要分两步走,实现 IDrawingStrategy,然后注册你的 IDrawingStrategy。

我用的是标准的垂直标尺,尝试实现一个自己的标尺,把标注画到上面。

标注只有界面上的提示,没有任何文字上的信息,用户很难知道到底是什么错误。不过不要担心,这是因为我还没有提到 Text Hover(文本悬浮帮助),以后的文章将完善这个功能。

这些不足的地方留给有兴趣的读者。

本文示例源代码或素材下载

上一页  1 2 3 4 5 6 

Tags:基于 JFace Text

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