AST (추상 구문 트리) 구문 분석기를 사용하여 프로그램의 각 메서드 선언에서 호출되는 메서드의 이름을 어떻게 얻을 수 있습니까? 지금까지 메서드의 선언의 모든 이름과 호출되는 메서드의 모든 이름을 가져 왔지만 어떤 메서드가 어떤 메서드를 호출하는지 알고 싶습니다. 방법 등 방법 mC
및 mD
를 호출 m2
예를 들어, 나는 방법 mA
및 mB
를 호출 m1
그 방법을보고 싶어방법 불러 오기 AST
[편집 2011년 11월 9일 IDB,의 몸에 다시 초보자의 확장 된 의견을 전사 원래 질문. 내가 올바르게 바꿔줬으면 좋겠다. 나는 저자가 돌아와서 필요에 따라 수정하기를 바란다.] :
내 이슈는 (Eclipse의) MethodDeclaration API에 GetInvokedMethodName 함수가 호출되지 않는 것 같다. 여기에 내 코드입니다 : 당신이 (클래스의 당신의 광대 한 배열을 통해 "MB의"라는 모든 사람의) 구체적인 방법 메가 바이트가 (M1)에 의해 호출되는 알고 싶다면
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 사용자가 그렇게 할 수있다.) 당신을 도울 것이다. 이 정리를 완료하려면 * you *가 해당 주석을 삭제할 수 있습니다. –