我想为我的计算机科学讲师写一个eclipse插件。它是一个基于xml的文件格式的自定义编辑器。 我已经实现了语法高亮和其他东西。但是当我使用注释/标记显示无效内容时,我坚持不懈。
如果内容有效,这就是它的样子:
image of valid conent http://image-upload.de/image/aPcsaa/6c799a671c.png
如果内容无效,这就是它的样子:
image of invalid conent 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
表示相同的查看器对象。
作为注释类型我测试:org.eclipse.ui.workbench.texteditor.spelling
和其他一些,也是自定义类型,但都具有相同的结果。
我不太确定,我做错了什么,可能是因为它只是一次通话?
我希望有人可以帮我解决这个问题。
提前谢谢。