1

Java ソース コードを分析するための Eclipse プラグインを開発しています。AST ツリー全体をトラバースし、各 variableDeclartionStatement にアクセスするためのビジターを記述します。一部の変数では、「resolvebinding」が IVariableBinding のインスタンスを返すことに気付きましたが、他の変数はそうではありません。それらを区別することはできません。ところで: ASTParser.setKind(K_COMPILATION_UNIT) と setResolveBindings(true) を設定しました。私のコードは次のとおりです。

@Override
public boolean visit(VariableDeclarationStatement vStatement) {
    Type theType = vStatement.getType();
    for(Iterator iterator = vStatement.fragments().iterator();iterator.hasNext();){
        VariableDeclarationFragment fragment = (VariableDeclarationFragment)iterator.next();
        IVariableBinding binding = fragment.resolveBinding();           
        if(binding !=null){
            ITypeBinding tBinding =  binding.getType();
            if(tBinding !=null){
                // if there is ArrayType, get the root type
                while(tBinding.getComponentType()!=null){
                    tBinding = tBinding.getComponentType();
                }
                System.out.println("USING BINDING VARIABLE CLASS IS: " + tBinding.getQualifiedName());  
            }

        }                       
    }
}

私の質問は次のとおりです。バインドを解決できる変数宣言と、解決できない変数宣言をどのように区別できますか?

よろしくお願いします

4

1 に答える 1

1

JavaDoc からVariableDeclarationFragment:

フィールド宣言、ローカル変数宣言、および ForStatement初期化子で使用される変数宣言フラグメント AST ノード タイプ。とは対照的に SingleVariableDeclaration、フラグメントには修飾子と型がありません。これらはフラグメントの親ノードにあります。

VariableDeclarationFragmentの親から型バインディングを取得してみてください。

于 2011-06-06T11:48:08.890 に答える