在此代码中,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;