0

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 が同じかどうかを確認するためのより洗練されたソリューションはありますか?

4

1 に答える 1

1

通常、バリデーターとビルダーは、戻ってその特定の検証またはビルド用に独自のマーカーを追加する前に、ファイル上のすべてのマーカーを削除します。彼らはあなたのアプローチをとる代わりにそのようにしたのではないかと思います。パフォーマンス上の重大な理由がない限り、私はそのアプローチを採用します。

古いものと新しいものを比較する必要がある場合は、switchステートメントを記述し、多くのキャストを行う必要がありますが、少なくともある種のファクトリパターンでエレガントに見せることはできます。

于 2012-10-17T14:41:37.637 に答える