Como obter a lista de métodos definidos em outra classe chamada a partir de um determinado método em Java

harshit modani:

Estou planejando para obter a lista de métodos definidos em um pacote (CommonPackage) chamados por uma classe definida em outro pacote (ServicePackage). Para isso, eu preciso de um para rastrear um determinado código de método e obter os métodos chamados fora desta classe.

Eu pesquisei as reflexões Java e não foi capaz de encontrar alguma solução para isso. I também passou por Como obter a lista de métodos chamados a partir de um método usando reflexão em C # e não foi capaz de encontrar qualquer solução conclusiva para JAVA especificamente.

ClassA {
    private ClassB classB;
    public methodA1(){
        classB.methodB1();
    }
}

ClassB {

    public methodB1(){
      // Some code
    }
}

Esperado: Para ClassA.MethodA1, obtemos a lista de métodos chamados dentro dela. Saída: ClassB.MethodB1

harshit modani:

Eu usei um manipulador de código-fonte aberto chamado byte Javassists que já tem uma API para buscar chamadas de método feitas em um determinado método. Ele também tem método para buscar o atributo de código que pode lhe dar a nenhuma das linhas em um determinado método.

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import javassist.expr.ExprEditor;
import javassist.expr.MethodCall;
public static void main(String[] args)
{
    ClassPool cp = ClassPool.getDefault();
    CtClass ctClass = null;
    try {
        ctClass = cp.get(className);
    } catch (NotFoundException e) {
        throw new RuntimeException(e);
    }

    CtMethod ctMethod = ctClass.getMethod(methodName);

    ctMethod.instrument( 
           new ExprEditor() {
               public void edit(MethodCall calledMethod) {
                   System.out.println("Method "+ calledMethod.getMethod().getName() + " is called inside "+methodName);
           }
    });
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=179227&siteId=1
Recomendado
Clasificación