基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding
2010-03-18 00:00:00 来源:WEB开发网清单 2. 添加新的 Ruler 列
// create viewer
CompositeRuler ruler = new CompositeRuler();
AnnotationRulerColumn column = new AnnotationRulerColumn(
12, new DefaultMarkerAnnotationAccess());
column.addAnnotationType("org.eclipse.ui.workbench.texteditor.error");
column.addAnnotationType("jtf.tutorial.annotation.undeclared.variable");
ruler.addDecorator(0, column);
注意如果用了 CompositeRuler,添加的实际上是 IVerticalRulerColumn 的实现了。
在适当的时候更新文本折叠标注
最后一步就是找一个合适的时机来更新文本折叠标注,第一时间你可能会想到添加一个 IDocumentListener,这样文本每次变化的时候就可以更新文本折叠标注。这是可以的,不过我要用另外一种方式。看看 SourceViewerConfiguration,它有一个 getReconciler 方法,返回类型是 IReconciler 接口。Reconciler 翻译过来是“调解人”,确实很是费解,你可以做如下理解:现在有一段文字,在你没有编辑它的时候,可以认为文字处于一种稳定的状态;当你开始编辑的时候,由于你不断的输入新字符,因此文字的稳定状态被打破了,各种建立好的关系被破坏,于是就出现了一个调解人来使破坏后的文字重回稳定状态。所以,Reconciler 会在你编辑文字之后被调用,但不是立刻!这样可以避免不必要的调用,提高性能。缺点是你必须等那么一小会儿才能看到结果。在本系列第二部分中,已经提到了 PresentationReconciler,虽然它并不是实现了 IReconciler 接口,但是其概念是一致的。
更新文本折叠标注的事情很适合用 Reconciler 来实现,所以我覆盖了 ExprConfiguration 的 getReconciler 方法:
更多精彩
赞助商链接