Как получить подпись метода с ObjectWeb ASM? - PullRequest
6 голосов
/ 25 мая 2011

Цель: получить подпись открытого метода (возвращаемое значение, параметр, имя метода) из файлов байт-кода Java.

Я использую инфраструктуру ObjectWeb ASM.

Проблема: я просмотрел спецификацию API ASM и перепробовал несколько примеров, но до сих пор не знаю, как получить подпись. Класс MethodNode имеет поле подписи, но значение равно нулю.

1 Ответ

11 голосов
/ 25 мая 2011

Вы можете попробовать что-то вроде этого:

ClassReader cr = new ClassReader(is);
cr.accept(new EmptyVisitor() {
  public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    if((Opcodes.ACC_PUBLIC & access)>0) {
      System.err.println("method name: " + name);
      System.err.println("return type: " + Type.getReturnType(desc));
      System.err.println("argument types: " + Arrays.toString(Type.getArgumentTypes(desc)));
    }
    return super.visitMethod(access, name, desc, signature, exceptions);
  }
}, 0);
...