如何使用ObjectWeb ASM获取方法签名?

时间:2011-05-25 00:50:02

标签: java methods bytecode signature

目的:从java字节码文件中获取公共方法签名(返回值,参数,方法名称)。

我正在使用ObjectWeb ASM框架。

问题:我浏览了ASM的API规范并尝试了几个示例,但我仍然不知道如何获取签名。 MethodNode类有一个签名字段,但值为null。

1 个答案:

答案 0 :(得分:11)

您可以尝试这样的事情:

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);