1

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

使用 I 的getFields()方法IType可以获得特定类的所有字段。

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

例子:

class A {

   List list<String>
   int a;
}

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

我怎样才能做到这一点?

4

1 回答 1

2

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

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

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

步骤 2)IFieldASTNode使用访问者模式中找到

    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 模型的结构。

于 2013-05-24T07:04:57.263 回答