4

我有一个 Eclipse 自定义编辑器,并且我实现了“在您键入时报告错误”,但是我的错误曲线(使用 JFace 注释)不时显示或在它们应该被删除后徘徊。

我正在使用MonoReconciler我的IReconcilingStrategy. 在此reconcile步骤中,我调用annotationModel.replaceAnnotations以删除旧错误并添加新错误。大多数时候这工作正常。时不时会丢失更新,我注意到以下内容:

  • 左侧标尺上的红色印记消失,但红色下划线保留
  • 在我输入的下一个字符上,下划线消失

我在调试器中验证了注释是正确计算的。下划线在输入字符后立即消失,而不是在协调器延迟 500 毫秒后消失。它看起来像丢失的 UI 更新/重绘。

某处必须存在竞争条件(协调器在自己的线程中运行)。我究竟做错了什么?我找不到有关此用例的任何文档。

编辑:要重现,请检查scala-worksheet并创建一个新的。类型

 object Test {
   val m = Map( 't' -> 1 )
 }

现在编辑箭头:删除>. 下划线不见了。键入一个空格,它会返回。添加回来,下划线仍然存在,直到您键入另一个空格。

我通过拜访下属来解决它,但在我看来这应该没有必要。我想了解使用编辑器注释的正确方法是什么。invalidateTextPresentationSourceViewer

PS。在此截屏视频中也可以看到丢失的更新。

4

1 回答 1

0

很难从远处判断,通常在 eclipse 中,任何影响 ui 的更改都应该在 ui 线程上执行(并且 eclipse 不会总是对此发出警告)。通常,您使用 Display.getDefault().asyncExec(...) 在 ui 线程上执行某些操作,但您可能已经知道这一点。可能会发生 2 个排队的更改导致竞争。

(我已经为我工作的公司 Sigasi 实施了几次语义突出显示、错误突出显示等。如果你能指出你的实施,我可能会找出问题所在。)

于 2012-09-20T11:44:48.543 回答