我正在使用 ASM 4.0 构建一个依赖项搜索工具,并且发现了一个我无法解决的极端情况。我遇到的问题与识别下面代码中 MyClass 的用法有关。
public void aMethod() {
new ArrayList<? extends MyClass>();
}
可以使用 MethodVisitor.visitTypeInst() 来识别 ArrayList 的用法,但在该范围内没有可用的签名方法来识别泛型类型参数中的用法。 MethodVisitor.visitLocalVariable() 也不是解决方案,因为没有创建本地变量。如果局部变量被显式声明为这样:
public void aMethod() {
ArrayList<? extends MyClass> list = new ArrayList<? extends MyClass>();
}
MethodVistor.visitLocalVariable() 工作正常,因为它通过签名参数提供对通用类型信息的访问。仅在没有声明本地变量的隐式情况下,我无法找到访问泛型类型参数的方法。
我假设有某种方法可以使用此代码的通用信息访问类属性,但我不确定如何执行此操作。
感谢您的帮助!!
最佳答案
方法体中的类型参数信息在字节码生成期间被丢弃。您无法通过分析字节码来获取它。
关于java - 使用 ASM 查找 "implicit"变量的通用签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098420/