为什么一些VariableDeclaration resolveBinding返回null但其他人没有

时间:2011-05-18 13:23:09

标签: abstract-syntax-tree eclipse-jdt

我正在开发一个eclipse插件来分析java源代码。我遍历整个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());  
            }

        }                       
    }
}

我的问题是:如何区分可以解析绑定的变量声明与不能解析绑定的变量声明?

非常感谢提前

1 个答案:

答案 0 :(得分:1)

来自VariableDeclarationFragment上的JavaDoc:

  

变量声明片段AST节点   类型,用于字段声明,   局部变量声明,和   ForStatement初始值设定项。它   相比较   SingleVariableDeclaration,片段   缺少修饰语和   类型;这些都位于   片段的父节点。

尝试从VariableDeclarationFragment的父级获取类型绑定。