Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin AnnotationModel中的竞争条件?对账器中丢失错误批注_Eclipse Plugin_Jface - Fatal编程技术网

Eclipse plugin AnnotationModel中的竞争条件?对账器中丢失错误批注

Eclipse plugin AnnotationModel中的竞争条件?对账器中丢失错误批注,eclipse-plugin,jface,Eclipse Plugin,Jface,我有一个Eclipse自定义编辑器,我实现了“键入时报告错误”,但我的错误曲线(使用JFace注释)偶尔不会显示,或者在应该删除它们之后会出现 我正在使用monoconreconciler实现ireconcillingstrategy。在协调步骤中,我调用annotationModel.replaceanotations删除旧错误并添加新错误。大多数情况下,这种方法效果很好。不时会丢失更新,我注意到以下几点: 左边标尺上的红色印记消失,但红色下划线保留 在我键入的下一个字符上,下划线消失 我

我有一个Eclipse自定义编辑器,我实现了“键入时报告错误”,但我的错误曲线(使用JFace注释)偶尔不会显示,或者在应该删除它们之后会出现

我正在使用
monoconreconciler
实现
ireconcillingstrategy
。在协调
步骤中,我调用
annotationModel.replaceanotations
删除旧错误并添加新错误。大多数情况下,这种方法效果很好。不时会丢失更新,我注意到以下几点:

  • 左边标尺上的红色印记消失,但红色下划线保留
  • 在我键入的下一个字符上,下划线消失
我在调试器中验证了注释的计算是否正确。下划线在键入字符后立即消失,而不是在对账器延迟500毫秒后消失。它看起来像是丢失的UI更新/重画

必须在某个地方存在竞争条件(协调器在其自己的线程中运行)。我做错了什么?我找不到关于这个用例的任何文档

编辑:要复制,请签出并创建一个新的。类型

 object Test {
   val m = Map( 't' -> 1 )
 }
现在编辑箭头:删除
。下划线不见了。键入一个空格,它就会返回。加回去,下划线仍然存在,直到您键入另一个空格

我通过在下面的
SourceViewer
上调用
invalidateTextPresentation
修复了它,但在我看来,这不应该是必需的。我想了解使用编辑器注释的正确方法是什么


另外,丢失的更新也可以在这里看到

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


(我为我工作的公司Sigasi多次实施了语义突出显示、错误突出显示等。如果您能向我指出您的实施,我可能会找出哪里出了问题。)

谢谢您的回答。我试着在
asyncExec
内部运行
replaceAnnotations
,但没有修复它。代码在中,我找不到“replaceAnnotations”您是指“updateErrorAnnotations”吗?顺便问一下,有没有一种简单的方法来重现此问题?我在尝试期间没有提交所有临时更改。我将用一种复制的方式编辑这个问题。