Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提取使用AST解析器实现的类的接口_Java_Eclipse Jdt_Abstract Syntax Tree - Fatal编程技术网

Java 提取使用AST解析器实现的类的接口

Java 提取使用AST解析器实现的类的接口,java,eclipse-jdt,abstract-syntax-tree,Java,Eclipse Jdt,Abstract Syntax Tree,我正在使用AST解析器编译一个项目源代码。我可以用什么方式提取类层次结构信息,即它是实现任何接口还是从另一个类扩展?您可以访问TypeDeclaration节点并从中获取类型绑定 ITypeBinding typeBind = typDec.resolveBinding(); 然后,您可以按如下方式获得超级类和实现的接口: public boolean visit(TypeDeclaration typeDeclaration) { ITypeBinding typeBind

我正在使用AST解析器编译一个项目源代码。我可以用什么方式提取类层次结构信息,即它是实现任何接口还是从另一个类扩展?

您可以访问
TypeDeclaration
节点并从中获取类型绑定

ITypeBinding typeBind = typDec.resolveBinding();
然后,您可以按如下方式获得超级类和实现的接口:

public boolean visit(TypeDeclaration typeDeclaration) {

        ITypeBinding typeBind = typeDeclaration.resolveBinding();
        ITypeBinding superTypeBind = typeBind.getSuperclass();
        ITypeBinding[] interfaceBinds = typeBind.getInterfaces();      

        return true;
}

如果您有一个IType实例(type),那么可以按如下方式获取ITypeHierarchy中的类层次结构

ITypeHierarchy typeHierarchie = type.newTypeHierarchy(new NullProgressMonitor());
ITypeHierarchy具有查询已实现接口的方法

typeHierarchie.getSuperInterfaces(type);
以及扩展了哪些类

typeHierarchie.getSuperclass(type); 
typeHierarchie.getAllSuperclasses(type);

除非您只需要解析特定文件中的类中的签名语法(或扩展的类名列表),否则Java需要跨多个文件(一些源文件,一些类文件)进行全名和类型解析。如果对你有帮助的话,投票或接受答案。我不使用IType实例这不使用IType。使用AST访问者模式和类型声明AST节点。更新答案以更清晰。