发生这种情况的原因是来自setResolveBindings文档的以下内容:
绑定信息是从Java模型获得的。这意味着
编译单元必须相对于Java模型位于。
当源代码来自
setSource(ICompilationUnit)或setSource(IClassFile)时,这将自动发生。当
setSource(char [])提供源时,必须
通过使用setProject(IJavaProject)或
setEnvironment(String [],String [],String [],boolean)和单元名称
setUnitName()设置环境来显式地建立位置。字符串)。请注意,影响文档注释
检查的编译器选项也可能会影响是否为
文档注释内的节点解析了任何绑定。
这意味着您可以使用类似的东西(通过链接):
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();IProject project = root.getProject("someJavaProject");project.open(null );IJavaProject javaProject = JavaCore.create(project);
and add the
setProjectcall:
private static CompilationUnit createCompilationUnit(String sourceFile, IJavaProject javaProject) { String source = readWithStringBuilder(sourceFile); ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setSource(source.toCharArray()); // set source parser.setProject(javaProject); parser.setResolveBindings(true); // we need bindings later on return (CompilationUnit) parser.createAST(null ); // parse}
The second approach (without
setProject):
private static CompilationUnit createCompilationUnit(String sourceFile, String unitName) { String source = readWithStringBuilder(sourceFile); ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setSource(source.toCharArray()); // set source String[] classpathEntries = ...; String[] sourcepathEntries = ...; parser.setEnvironment(classpathEntries, sourcepathEntries, null, true); parser.setUnitName(unitName); parser.setResolveBindings(true); // optional // parser.setBindingsRecovery(true); return (CompilationUnit) parser.createAST(null ); // parse}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)