このコードでは、prosseek.B#bar() メソッドが prosseek.SuperA#foo() を呼び出します。
package prosseek;
public class SuperA {
int i = 0;
public void foo()
{
System.out.println(i);
}
}
public class B {
public void bar()
{
SuperA a = new SuperA();
a.foo();
}
}
bar() で呼び出された foo() のタイプを検出する必要があります。ASTVisitor を使用して MethodInvocation コード (a.foo()) を検出していますが、そこから型を取得するにはどうすればよいかわかりませんSuperA
。
ICompilationUnit icu = type.getCompilationUnit();
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(icu);
parser.setResolveBindings(true); // we need bindings later on
CompilationUnit unit = (CompilationUnit) parser.createAST(null);
unit.accept(new ASTVisitor() {
public boolean visit(MethodInvocation methodInvocation)
{
// ???
return false;
}
}
追加した
JDTの基本チュートリアルからヒントを得ました。
次のコードを試しました:
IBinding binding = methodInvocation.resolveTypeBinding();
IType type = (IType)binding.getJavaElement();
if (type == null)
return false;
しかし、 binding.getJavaElement(); の戻り値に null を取得しました。