簡體   English   中英

使用JDT和AST從嵌套方法調用中獲取類型

[英]Obtain type from nested method call using JDT and AST

如何推斷嵌套方法調用的類型,例如:

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

之后,如果無法使用表達式解析綁定。

在此示例中,您有2個方法調用。 因此,除非返回false否則您的訪客將被調用2次。

首次使用此表達式javaSourceFile.getClasses().size() ,如果調用resolveTypeBinding() ,則實際上將獲得size()方法的類型,因為它首先發生。

但是,在給定的代碼中,如果使用javaSourceFile.getClasses().size()調用了訪問者,則實際上是在解析javaSourceFile.getClasses()類型,因為您使用了getExpression()方法。 (注意:如果您的訪問方法沒有返回false ,它將再次作為javaSourceFile.getClasses()進行訪問(因為它也是方法調用),然后您將獲得javaSourceFile變量的類型)

您還說過,您會得到null ,如果一切都設置正確(例如,您可能未指定某些類的classpaths / sourcepaths),我相信這不會發生。 由於我需要完整的代碼,所以無法說明為什么會發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM