如何从错位名称中获取方法参数列表?

时间:2011-12-01 09:56:14

标签: java

我在cobertura.xml

中有以下信息
<method name="visitNode"
        signature="(Lchs/cof/drawplus/IJoint;Lchs/cof/logical/schem/ISegment;Lchs/analysis/GraphServices$IGraphVisitor;I)Z"

签名是java方法的错位名称。 (http://asm.ow2.org/doc/faq.html#Q7

如何构造方法参数列表,如下所示。

 boolean visitNode(drawplus.IJoint root,
            schem.ISegment segmentBefore,
            IGraphVisitor visitor,
            int branch)

是否有可以进行去除损坏的库?

3 个答案:

答案 0 :(得分:2)

您可以从方法描述符中提取参数类型和结果,但不能提取参数名称。

我不知道有哪个库可以进行此提取,但我确定此代码已经实现了几次。实现自己并不困难。方法描述符字符串的语法在Java虚拟机规范中指定 - JVMS 4.3.3

答案 1 :(得分:2)

JD Core应该为你做这一切。但是,它是一个c ++ lib,因此它可能不适用于您。 BCEL (Byte Code Engineering Library允许您创建,分析和修改二进制文件,这些文件应该符合您的要求。 BCEL是用java编写的 如果未使用debug标志编译类文件,则参数名称可能是通用的。

答案 2 :(得分:1)

这是对重复规则的再现,因为这个问题对于该主题的搜索结果非常高。以下详细信息来自原始问题中的链接。

原始表示:

  • V - void
  • Z - boolean
  • C - char
  • B - byte
  • S - short
  • I - int
  • F - float
  • J - long
  • D - double

班级表示:

  • L<class>;
  • Ljava/io/ObjectOutput;
  • Ljava/lang/String;