1

特定のソースを解析するために JDT AST を使用しています。AST を使用しているときに関連するビジターをトリガーするときに、特定のオブジェクト/変数の参照を見つけたいと考えています。例: 次のコードを検討してください。

public class SampleClass {
    public void printMe(){
        System.out.println("hello");
    }

    public static void main(String a[]){
        SampleClass s =new SampleClass();
        // do some other work
        s.printMe();
    }
}

上記のコードを解析すると、「s」の変数宣言になると、「VariableDeclarationFragment」型のビジター メソッドが呼び出されます。その時点で、変数「s」のすべての参照を見つけてから、残りのコード行にアクセスしたいと思います。これは可能ですか?JDT SearchEngine を使用して、その時点で呼び出して参照を個別に解決することを考えました。しかし、成功しませんでした。AST自体だけでできますか?

Eclipse プラグイン プロジェクトとしてではなく、スタンドアロン プログラムで JDT AST を使用していることに注意してください。その場合、特定のコード単位 (クラス、メソッドなど) の IJava* タイプを解決できないため、SearchEngine を使用できるかどうか少し混乱しています。これを整理するためにあなたの専門知識を共有してください。

4

1 に答える 1

1

検索エンジンの使用はやり過ぎです。検索エンジンはクロスファイル検索用です。また、ワークベンチを開始しないと (つまり、バックグラウンドで Eclipse インスタンスがないと)、検索エンジンを使用できません。

同じファイル内の変数への参照のみを検索したいようです。ここでの最善の策は、ファイル全体にアクセスして変数への参照を探すビジターを作成することです。これらは変数であり、そのスコープは宣言されているメソッドをエスケープしないため、そのメソッドにアクセスするだけで済みます。

このようなもの:

class MyVariableVisitory extends ASTVisitor {
    public boolean visit(SimpleName node) {
        if (node.getIdentifier().equals(variableToLookFor)) {
            acceptMatch(node);
        }
        return true;
    }
}

変数への参照のみを探しているため、Nameast ノードのみを確​​認する必要があります。

于 2012-12-27T16:44:24.860 に答える