0

多数のソースファイルを解析する必要があるEclipseJDTプラグインに取り組んでいるので、バッチメソッド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を間違って使用している場合は、ご協力いただければ幸いです。

バイロン

4

1 に答える 1

0

あなたの例外が何であるかを正確に知らなくても、私はまだ2つの提案を提供することができます:

  1. をご覧くださいorg.eclipse.jdt.ui.SharedASTProvider。AST に変更を加えていない場合、このクラスは AST を取得するためのより堅牢な方法を提供する可能性があります。
  2. 使用している設定のいくつかを試してみてください。本当に bindingsRecovery を true に設定する必要がありますか? statementRecovery はどうですか?これらを false に設定すると役立つ場合があります。
于 2011-10-14T16:39:55.617 に答える