如何推断嵌套方法调用的类型,例如:
JavaSourceFile javaSourceFile = new JavaSourceFile();
javaSourceFile.getClasses().size()
适用于普通方法调用,例如
javaSourceFile.getClasses()
但是我想获得getClasses()的返回类型。这就是我的工作。在
ASTVisitor.visit(MethodInvocation invocation)
我想获取size()调用的类型。我用
Expression expression = invocation.getExpression();
if (expression != null) {
ITypeBinding typeBinding = expression.resolveTypeBinding();
if (typeBinding != null) {
Call call = new Call(invocation.getName().getFullyQualifiedName(), typeBinding.getName());
this.activeMethod.getCalls().add(call);
}
}
获取方法调用的类型。但是,如果有一个方法调用,如在开始时概述,我只是得到null。我也用
invocation.resolveMethodBinding();
之后如果使用表达式无法解析绑定。
答案 0 :(得分:0)
在此示例中,您有2个方法调用。因此,除非您返回false
,否则您的访问者将被调用2次。
首次使用此表达式javaSourceFile.getClasses().size()
访问时,如果您致电resolveTypeBinding()
,您实际上会获得size()
方法的类型,因为它首先发生。
但是,如果您的访问者使用javaSourceFile.getClasses().size()
进行了调用,那么在您的代码中,您实际上正在解析javaSourceFile.getClasses()
的类型,因为您使用了getExpression()
方法。 (注意:如果您的访问方法没有返回false
,它将再次作为javaSourceFile.getClasses()
访问(因为它也是方法调用),然后您将获得javaSourceFile
变量的类型< / p>
另外你说你得到null
我相信如果一切都设置正确就不会发生(例如你可能没有指定某些类的类路径/源路径)。不知道为什么会发生这种情况,因为我需要完整的代码。