Eclipse JDT によって提供される抽象構文ツリーを定期的にウォークし、特定のノードに IMarkers を配置する Eclipse 用のプラグインを作成しています。その後の各ウォークでは、2 番目 (または 3 番目、4 番目、または...) のマーカーを配置することは避けたいと考えています。
これらのノードの位置は変更できますが (ドキュメントがウォーク間で編集された場合)、IMarker は変更されません (ドキュメントが保存されるまで IMarker の位置は更新されません)。
また、ASTNode の .equals メソッドも使用できません。保存されている ASTNode のコピーでは、これらの charstart および charend の位置が更新されないためです。getParent() ノードの比較も試みましたが、これには独自の問題があります (つまり、別々の catch ブロックにある 2 つの printStackTraces には共通のTryStatement親があります) 。
現在、 ASTMatcherを拡張し、さまざまな matches() メソッドをオーバーライドすることを検討していますが、各 matches() を呼び出すには、ノードの 1 つを ASTNode から適切なサブクラスにキャストする必要があります。
大規模な switch ステートメントと多くのキャストでそれを書き上げようとする前に、.equals() に依存せずに 2 つの ASTNode が同じかどうかを確認するためのより洗練されたソリューションはありますか?