我正在使用 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() 工作正常,因为它通过签名参数提供对泛型类型信息的访问。只有在没有声明本地变量的隐式情况下,我才能找到访问泛型类型参数的方法。
我假设有某种方法可以使用此代码的通用信息访问类属性,但我不确定如何执行此操作。
谢谢你的帮助!!