如何使用AST(抽象語法樹)分析器獲取程序的每個方法聲明中調用的方法的名稱?到目前爲止,我已經設法獲得了方法聲明的所有名稱和被調用方法的所有名稱,但是我想知道哪個方法調用哪些方法。例如,我想看看m1
調用方法mA
和mB
該方法,而方法調用m2
方法mC
和mD
等從AST獲取方法調用信息
[編輯11/9/2011 IDB,抄錄新手的擴展評論回來的身體原來的問題。我希望我已經正確地轉錄了它。我希望作者回來,並根據需要修改]:
我的問題似乎是(Eclipse的)MethodDeclaration api沒有一個GetInvokedMethodName函數來調用。這裏是我的代碼:
public class MethodVisitor extends ASTVisitor {
List<MethodDeclaration> methods = new ArrayList<MethodDeclaration>();
@Override public boolean visit(MethodDeclaration node) {
methods.add(node);
return super.visit(node); }
public List<MethodDeclaration> getMethods()
{ return methods; }
List<MethodInvocation> methods1 = new ArrayList<MethodInvocation>();
@Override public boolean visit(MethodInvocation node)
{ methods1.add(node);
return super.visit(node); }
public List<MethodInvocation> getMethods1()
{ return methods1; }
}
...
for (MethodDeclaration method : visitor .getMethods())
{ System.out.println("Method name: " + method.getName()
+ " Return type: " + method.getReturnType2()
+ " Is constructor: " + method.isConstructor()
+ " Method invoked: " + ASTNode.METHOD_INVOCATION);
); }
for (MethodInvocation method1 : visitor .getMethods1())
{ System.out.println("Method name invoked: " + method1.getName()); }
Spyros:您提供的作爲背景的附加信息應該真正添加到問題本身中。在將你的代碼塊分解爲註釋大小的部分之後,它應該是顯而易見的,它基本上是不可讀的。閱讀我的答案的其他人很可能會跳過這些評論,並會錯過額外的內容。你可以編輯你的問題;請參閱您的問題下的**編輯**「按鈕」。我冒昧將您的補充評論轉移到您的問題中(高級SO用戶可以這麼做)來幫助您。要完成此清理,*您*可以刪除這些註釋。 –