我正在使用jdt java模型来获取有关工作区中现有项目的信息。
使用getFields()
IType
方法获取特定类的所有字段。
但是我需要知道特定字段是否是引用类型。此外,我还需要知道引用类型是否包含特定方法。
示例:
class A {
List list<String>
int a;
}
所以我想知道A类的字段“ list ”是否是引用类型,如果"list"
包含例如method "remove".
我该怎么做?
答案 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模型的结构。