我有一個Eclipse自定義編輯器,並且在輸入時實現了「報告錯誤」,但是現在和之後我的錯誤消失(使用JFace註釋)在應該刪除後都不會顯示或留下。AnnotationModel中的競態條件?在Reconciler中丟失錯誤註釋
我使用MonoReconciler
與我的實施IReconcilingStrategy
。在reconcile
步驟中,我呼叫annotationModel.replaceAnnotations
刪除舊錯誤並添加新錯誤。大多數時候這工作正常。時不時的更新都將丟失,和我注意到以下幾點:
- 左側尺的紅色印章消失,但紅色下劃線留
- 對下一個字符I型,底線就會消失
我在調試器中驗證註釋是正確計算的。輸入一個字符後,下劃線立即消失,並且在調解器延遲500毫秒後不爲。它看起來像是一個丟失的UI更新/重繪。
某處存在競爭條件(協調器在其自己的線程中運行)。我究竟做錯了什麼?我找不到有關此用例的任何文檔。
編輯:重現,結帳scala-worksheet並創建一個新的。類型
object Test {
val m = Map('t' -> 1)
}
現在編輯箭頭:刪除>
。下劃線缺失。鍵入一個空格,它會返回。加回來,下劃線仍然存在,直到你輸入另一個空格。
我固定它通過invalidateTextPresentation
上SourceViewer
,但在我看來,應該沒有必要。我想了解什麼是使用編輯器註釋的正確方法。
PS。丟失的更新也可以在screencast中看到。
謝謝你的答案。我嘗試在'asyncExec'內運行'replaceAnnotations',但沒有解決它。代碼在https://github.com/scala-ide/scala-worksheet/blob/master/org.scalaide.worksheet/src/org/scalaide/worksheet/reconciler/ScalaReconcilingStrategy.scala#L37 –
我不能找到'replaceAnnotations'的意思是'updateErrorAnnotations'? – llemieng
順便說一句有沒有一種簡單的方法來重現此問題? – llemieng