1

我想为我的计算机科学讲师编写一个 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);
  }
});

顺便说一下ITextViewerISourceViewer都意味着相同的查看器对象

作为注释类型,我有 testet:org.eclipse.ui.workbench.texteditor.spelling和其他一些,也是自定义类型,但结果都相同。

我不太确定,我做错了什么,可能是因为这一切都在一个电话中吗?

我希望有人可以帮助我解决这个问题。

先感谢您。

4

0 回答 0