我正在使用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()可以正常工作,因为它可以通过签名参数访问通用类型信息。只有在隐式的情况下,没有声明局部var,我才能找到一种访问泛型类型参数的方法。

我假设有某种方法可以使用此代码的常规信息访问class属性,但是我不确定如何执行此操作。

谢谢你的帮助!!

最佳答案

在字节代码生成期间,方法主体中的类型实参信息将被丢弃。您将无法通过分析字节码来了解它。

10-06 13:32
查看更多