在ASM字节码库中获取泛型信息

时间:2013-11-25 05:21:49

标签: java generics java-bytecode-asm

我正在使用ASM库来解析Java字节码,现在我正在尝试解析一个方法,而且我的方法很好。但是我在解析方法的参数并将其转换为等效的Java源代码时面临一些问题,特别是如果参数类型为Generic List,ArrayList,Set等。请考虑此方法访问者代码:

public MethodVisitor visitMethod(int arg0, String arg1, String arg2,
        String arg3, String[] arg4)
{
     System.out.println("Method params: " + arg2);
}

只是打印:

(Ljava/util/List;)V

此方法参数:

List<String> foo;

正如您所看到的,我已经丢失了<>之间的所有内容。我知道对于泛型类型的擦除。

但我需要这些信息才能知道哪种类型的List不仅仅是java/util/List。无论如何使用ASM库获取此信息?

1 个答案:

答案 0 :(得分:3)

ASM有一个SignatureVisitor,您可以使用它来访问类型签名。那些包含访问过的类,方法和字段的泛型信息。

您可以在asm guide下的4.1 - generics

部分找到更多相关信息