2017-06-07 1 views
1

Je veux analyser les fichiers source java (.java) afin d'identifier les méthodes, dans une classe, qui contiennent des appels à une méthode spécifique.Comment analyser le corps de la méthode java?

Dans l'exemple ci-dessous, j'ai besoin de savoir quelles méthodes contiennent un appel à xyz(). Ainsi, l'analyseur doit retourner method01 et method03

public class A{ 
    private void method01(){ 
     //some statements 
     xyz(); 
     //more statements 
    } 

    private void method02(){ 
     //some statements 
     xyz123(); 
     //more statements 
    } 

    private void method03(){ 
     //some statements 
     xyz(); 
     //more statements 
    } 
} 

J'ai essayé d'utiliser javaparser (com.github.javaparser). J'ai créé un vistor et en remplaçant

public void visit(MethodDeclaration n, Void arg) 

Je suis capable de "visiter" toutes les méthodes de la classe.

Mais je ne sais pas comment analyser le corps de la méthode visted. .. Je suis réticent à utiliser n.getBody() toString() contient (« xyz() »)

Répondre

2

En inspectant le Javadoc, il semble que vous pourriez faire quelque chose comme ceci:

private MethodDeclaration currentMethod = null; 

@Override 
public void visit(MethodDeclaration n, Void arg) { 
    currentMethod = n; 
    super.visit(n, arg); 
    currentMethod = null; 
} 

@Override 
public void visit(MethodCallExpr n, Void arg) { 
    super.visit(n, arg); 
    if (currentMethod != null && n.getName().asString().equals("xyz") { 
     // Found an invocation of xyz in method this.currentMethod 
    } 
} 

Le code ci-dessus garde la trace de la méthode actuelle et trouve quand un appel de méthode est visité qui correspond au nom "xyz"

+0

Il existe plusieurs façons de résoudre ce problème, mais cela devrait fonctionner. Bien sûr, nous ne savons pas quelle méthode appelée xyz nous appelons, juste que nous sommes appelés et une méthode nommée xyz –