6

JDTASTを使用しASTParserてメソッドを解析するEclipseプラグインを作成しています。私はそのメソッド内で特定のタイプのオブジェクトを作成することを検討しています。

を見つけたら、どのタイプがインスタンス化されているかを確認するためにそれClassInstanceCreationを呼び出します。getType()処理されている完全に解決されたタイプが、私が考えているタイプであることを確認したいので、結果のTypeオブジェクトをに伝えますresolveBinding()。コンパイルエラーがなく、を呼び出してnullも、戻ってsetResolveBindings(true)ASTParserます。ASTParserメソッドを含むを(経由でsetSource())与えたICompilationUnitので、パーサーはワークスペースコンテキスト全体にアクセスできます。

final IMethod method = ...;
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setSource(method.getCompilationUnit());
parser.setSourceRange(method.getSourceRange().getOffset(), method.getSourceRange().getLength());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
final TypeDeclaration astRoot = (TypeDeclaration) parser.createAST(null);
final ClassInstanceCreation classInstanceCreation = walkAstAndFindMyExpression(astRoot);
final Type instantiatedType = classInstanceCreation.getType();
System.out.println("BINDING: " + instantiatedType.resolveBinding());

なぜresolveBinding()戻るのnullですか?バインディング情報を取得するにはどうすればよいですか?

4

1 に答える 1

5

の概要の下部に隠れており、ASTParser.setKind()トラブルシューティングを行う人から注意深く隠されています。resolveBinding()setResolveBindings()

バインディング情報は、がの場合にのみ計算されkindますK_COMPILATION_UNIT

オンラインJavadocから)

なぜそうなるのか、私にはわかりませんが、何が違う必要があるのか​​をはっきりと示しているようです。

于 2010-04-13T18:14:42.720 に答える