我正在使用 jdt java 模型来获取有关工作区中现有项目的信息。
使用 I 的getFields()
方法IType
可以获得特定类的所有字段。
但我需要知道某个特定字段是否是引用类型。此外,我还需要知道引用类型是否包含特定方法。
例子:
class A {
List list<String>
int a;
}
所以我想知道A类的字段“ list ”是否是引用类型,是否"list"
包含例如method "remove".
我怎样才能做到这一点?
我正在使用 jdt java 模型来获取有关工作区中现有项目的信息。
使用 I 的getFields()
方法IType
可以获得特定类的所有字段。
但我需要知道某个特定字段是否是引用类型。此外,我还需要知道引用类型是否包含特定方法。
例子:
class A {
List list<String>
int a;
}
所以我想知道A类的字段“ list ”是否是引用类型,是否"list"
包含例如method "remove".
我怎样才能做到这一点?
您将需要使用抽象语法树 (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)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 模型的结构。