jdt:检查Field是否为引用类型

时间:2013-05-23 11:55:39

标签: java eclipse-jdt

我正在使用jdt java模型来获取有关工作区中现有项目的信息。

使用getFields() IType方法获取特定类的所有字段。

但是我需要知道特定字段是否是引用类型。此外,我还需要知道引用类型是否包含特定方法。

示例:

class A {

   List list<String>
   int a;
}

所以我想知道A类的字段“ list ”是否是引用类型,如果"list"包含例如method "remove".

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您需要使用抽象语法树(AST)深入了解Java模型。以下代码尚未经过测试,但它应该让您对如何开始有所了解。

步骤1)将包含该字段的ICompilationUnit解析为ASTNode

    ASTParser parser = ASTParser.newParser(AST.JLS4);
    parser.setResolveBindings(true);
    parser.setSource(field.getCompilationUnit());
    ASTNode unitNode = parser.createAST(new NullProgressMonitor());

步骤2)使用访问者模式

IField中找到ASTNode
    unitNode.accept(new ASTVisitor() {
        @Override
        public boolean visit(VariableDeclarationFragment node) {
            IJavaElement element = node.resolveBinding().getJavaElement();
            if (field.equals(element)) {
                FieldDeclaration fieldDeclaration = (FieldDeclaration)node.getParent();
                IType fieldType = (IType)fieldDeclaration.getType().resolveBinding().getJavaElement();
            }
            return false;
        }
    });

FieldDeclaration您可以获得该字段的IType。从你的问题猜测,你知道如何从这里开始(即fieldType.getMethods())。

使用AST的一个好工具是来自JDT UI工具的ASTView(更新站点:http://www.eclipse.org/jdt/ui/update-site)。使用此工具,您可以查看代码并查看AST模型的结构。