我正在创建一个程序(不在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}。当我传递我正在编写的项目的源代码时,我能够提取完整类型(因此解析器能够解析自己的源代码并提取类型名称)。所以我的问题是,从其他源文件中提取完整类型我缺少什么?
答案 0 :(得分:1)
它不知道在哪里查找类型以创建这些绑定。查看#setResolveBindings()的JavaDoc:
从Java模型获取绑定信息。这意味着编译单元必须相对于Java模型。当源代码来自setSource(ICompilationUnit)或setSource(IClassFile)时,会自动发生这种情况。当source由setSource(char [])提供时,必须通过使用setProject(IJavaProject)或setEnvironment(String [],String [],String [],布尔值设置环境来明确建立位置)和单位名称setUnitName(String)。请注意,影响doc注释检查的编译器选项也可能会影响是否为doc注释中的节点解析任何绑定。