我正在使用Eclipse JDT AST解析器来处理一些Java代码,并试图提取字段和方法声明的类型绑定(bind)。这样做的逻辑是在我的Visitor类中(请参见下文)。不幸的是,我没有任何运气,也没有任何绑定(bind)可以解决(它们始终为null)。有趣的是,绑定(bind)确实可以与Eclipse ASTView插件在相同的代码上工作。我究竟做错了什么?

以下是一些相关的代码片段,有望帮助某人弄清楚发生了什么!

ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source);
parser.setResolveBindings(true);
CompilationUnit unit = (CompilationUnit) parser.createAST(null);

GenericVisitor visitor = new GenericVisitor(outDir + "//" + file.getName() + ".xml");
visitor.process(unit);


public class GenericVisitor extends ASTVisitor
{
    public void endVisit(FieldDeclaration node)
    {
        String bindingInfo = "";
        ITypeBinding binding = node.getType().resolveBinding();

        if(binding == null)
        {
         System.out.println("field declaration binding = null");
        }
        else
        {
         bindingInfo = binding.getQualifiedName();
        }

        endVisitNode(node, bindingInfo);
    }

    public void endVisit(MethodInvocation node)
    {
         String bindingInfo = "";
         IMethodBinding binding = node.resolveMethodBinding();

     if(binding == null)
     {
        System.out.println("method binding = null");
     }
     else
     {
         bindingInfo = binding.toString();
     }

    endVisitNode(node, bindingInfo);
    }
}

最佳答案

使用时:
parser.setSource(source);
参数“源”的类型是什么?



这是从http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/ASTParser.html
我认为也许您只使用setSource(char [])而不调用setProject(IJavaProject)和setUnitName(String)

09-07 13:30
查看更多