Я работаю над плагином 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 неправильно - я был бы очень признателен за вашу помощь.
Байрон