使用JDT和AST从嵌套方法调用中获取类型

时间:2014-03-26 14:47:32

标签: java eclipse abstract-syntax-tree eclipse-jdt

如何推断嵌套方法调用的类型,例如:

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();

之后如果使用表达式无法解析绑定。

1 个答案:

答案 0 :(得分:0)

在此示例中,您有2个方法调用。因此,除非您返回false,否则您的访问者将被调用2次。

首次使用此表达式javaSourceFile.getClasses().size()访问时,如果您致电resolveTypeBinding(),您实际上会获得size()方法的类型,因为它首先发生。

但是,如果您的访问者使用javaSourceFile.getClasses().size()进行了调用,那么在您的代码中,您实际上正在解析javaSourceFile.getClasses()的类型,因为您使用了getExpression()方法。 (注意:如果您的访问方法没有返回false,它将再次作为javaSourceFile.getClasses()访问(因为它也是方法调用),然后您将获得javaSourceFile变量的类型< / p>

另外你说你得到null我相信如果一切都设置正确就不会发生(例如你可能没有指定某些类的类路径/源路径)。不知道为什么会发生这种情况,因为我需要完整的代码。