我想为我的计算机科学讲师编写一个 Eclipse 插件。它是一个基于 xml 文件格式的自定义编辑器。我已经实现了语法高亮和其他东西。但是在使用注释/标记来显示无效内容时,我坚持了下来。
如果内容有效,这就是它的样子:
有效内容图片 http://image-upload.de/image/aPcsaa/6c799a671c.png
如果内容无效,这就是它的样子:
无效内容的图片 http://image-upload.de/image/4TdooQ/04d662f397.png
如您所见,无效属性将被标记,但问题是,这些注释之间似乎丢失了整个格式。
我使用org.eclipse.jface.text.reconciler.Reconciler
延迟解析内容来创建文档模型。该模型用于格式化文本和显示注释。这一切都发生void process(DirtyRegion dirtyRegion)
在Reconciler
.
对于我使用的文本格式和我使用<ITextViewer>.changeTextPresentation(textAttributes, false)
的注释处理
IAnnotationModel annotationModel = <ISourceViewer>.getAnnotationModel();
IAnnotationModelExtension annotationModelExtension = (IAnnotationModelExtension) annotationModel;
annotationModelExtension.replaceAnnotations(oldAnnotations, newAnnotations);
由于Reconciler
不使用 swt 线程,因此我必须使用此构造来避免异常:
<ITextViewer>.getTextWidget().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
<ITextViewer>.changeTextPresentation(textAttributes, false);
updateAnnotations(nodes);
}
});
顺便说一下ITextViewer
和ISourceViewer
都意味着相同的查看器对象。
作为注释类型,我有 testet:org.eclipse.ui.workbench.texteditor.spelling
和其他一些,也是自定义类型,但结果都相同。
我不太确定,我做错了什么,可能是因为这一切都在一个电话中吗?
我希望有人可以帮助我解决这个问题。
先感谢您。