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 に答える