Java AST Parser - 获取完整类型的参数,外部项目

时间:2016-03-11 22:09:23

标签: java eclipse parsing types abstract-syntax-tree

我正在创建一个程序(不在Eclipse中),用户输入一个源代码目录,然后解析该代码。说到方法,我希望能够提取完整的参数类型。示例:从protected void onCreate(Bundle)开始,我应该可以提取android.os.Bundle。这是我激活绑定的代码:

ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setUnitName(file.getName());  // name of file (Apple.java)
parser.setEnvironment(new String[] {""}, new String[] {""}, new String[] {"UTF-8"}, true);
parser.setSource(str.toCharArray());  // source code in file Apple.java
parser.setResolveBindings(true);
parser.setBindingsRecovery(true);
parser.setStatementsRecovery(true);

parser.setKind(ASTParser.K_COMPILATION_UNIT);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);

在调试器中,我能够确认绑定已被激活,但它声称Bundle的类型是{MissingTypeBinding}。当我传递我正在编写的项目的源代码时,我能够提取完整类型(因此解析器能够解析自己的源代码并提取类型名称)。所以我的问题是,从其他源文件中提取完整类型我缺少什么?

1 个答案:

答案 0 :(得分:1)

它不知道在哪里查找类型以创建这些绑定。查看#setResolveBindings()的JavaDoc:

  

从Java模型获取绑定信息。这意味着编译单元必须相对于Java模型。当源代码来自setSource(ICompilationUnit)或setSource(IClassFile)时,会自动发生这种情况。当source由setSource(char [])提供时,必须通过使用setProject(IJavaProject)或setEnvironment(String [],String [],String [],布尔值设置环境来明确建立位置)和单位名称setUnitName(String)。请注意,影响doc注释检查的编译器选项也可能会影响是否为doc注释中的节点解析任何绑定。