我正在开发一个需要解析大量源文件的Eclipse JDT插件,
所以我希望使用批处理方法ASTParser.createASTs()。解析执行时没有错误,但在它生成的CompilationUnit实例中,许多org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding
实例已将scope
字段设置为null
。此设置为null发生在CompilationUnitDeclaration.cleanUp()
方法中,这些方法在与我的插件代码无关的工作线程上调用(即,我的插件的类不出现在cleanUp()
方法调用堆栈中)。
我的解析代码如下所示(所有rawSources
都在同一个项目中):
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setStatementsRecovery(true);
parser.setBindingsRecovery(true);
parser.setIgnoreMethodBodies(false);
parser.setProject(project);
parser.createASTs(rawSources.values().toArray(new ICompilationUnit[0]), new String[0], this, deltaAnalyzer.progressMonitor);
或者,我可以用这种方式执行解析,并且不会出现这样的问题:
for (ICompilationUnit source : rawSources.values())
{
parser.setResolveBindings(true);
parser.setStatementsRecovery(true);
parser.setBindingsRecovery(true);
parser.setIgnoreMethodBodies(false);
parser.setProject(project);
parser.setSource(source);
CompilationUnit ast = (CompilationUnit)parser.createAST(deltaAnalyzer.progressMonitor);
parsedSources.add(deltaAnalyzer.createParsedSource(source, ast));
}
Helios和Indigo(最新版本)都会出现此问题。我在Eclipse Bugzilla中提交了一个错误,但是如果有人知道解决这个问题的方法 - 或者如果我使用API错误 - 我将非常感谢您的帮助。
拜伦
答案 0 :(得分:0)
如果不确切知道您的例外情况,我仍然可以提供2条建议:
org.eclipse.jdt.ui.SharedASTProvider
。如果您没有对AST进行任何更改,则此类可能会提供更强大的获取AST的方法。