如何通过 ASM 或 Javassist 等 jar 获取 Java 方法的所有引用类?

问题描述 投票:0回答:1

如下代码所示:

public class Main implements MainInter{
    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        DClassFather var = new DClassFather();
        DClassFather d = new DClass();
    }
}

我怎样才能知道方法“Main: main”引用类“java.lang.String”、“java.util.ArrayList”、“java.util.List”、“DClassFather”、“DClass”

java maven bytecode java-bytecode-asm javassist
1个回答
1
投票

没有内置的方法可以做到这一点,但是您可以访问(或在 asm-tree 的情况下迭代)每条指令并收集集合中的引用。

基本概念是这样的(使用 asm-tree):

Set<String> dependencies = new HashSet<String>();

for (AbstractInsnNode insnNode : methodNode.instructions) {
    if (insnNode instanceof MethodInsnNode methodInsn) {
        dependencies.add(methodInsn.owner);
        //If you want the full references you should also get the types of the methodDescriptor
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.