【发布时间】:2017-05-01 21:54:14
【问题描述】:
TL;DR:给定字节码,我如何找出给定方法中使用了哪些类和方法?
在我的代码中,我想以编程方式找到所有具有过多访问限定符的类和方法。这应该基于对继承、静态使用以及我提供的提示的分析(例如,使用一些自制注释,如 @KeepPublic)来完成。作为一种特殊情况,会找到未使用的类和方法。
我只是做了一些类似但更简单的事情,即将final 关键字添加到所有有意义的类中(即,它是允许的,并且该类不会被例如 Hibernate 代理)。我以测试的形式进行了测试,它知道要忽略的类(例如实体)并抱怨所有不必要的非最终类。
对于我的所有类,我想找到它使用的所有方法和类。关于课程,有this answer using ASM's Remapper。关于方法,我找到了an answer proposing instrumentation,这不是我现在想要的。我也不是在寻找像 ucdetector 这样与 Eclipse AST 一起使用的工具。 如何根据字节码检查方法主体?我想自己做,这样我就可以以编程方式消除不需要的警告(在使用 Lombok 时,ucdetector 有很多警告)。
【问题讨论】:
-
@AndyThomas 我的最后一句话实际上是问题。我现在要说清楚。
-
支持读取字节码的常用库有 asm (asm.ow2.org) 或 bcel (commons.apache.org/proper/commons-bcel)
-
@maaartinus 您正在寻找可以帮助您读取和/或分析字节码的库。这意味着您要求我们推荐一个图书馆。 StackOverflow Help Center 中的 quoted text 是否让您对 off-topic 问题的含义感到困惑?
-
@Andreas 不,我知道文本。我的问题只是“给定字节码,我如何找出给定方法中使用了哪些类和方法?”。任何地方都没有提到图书馆。相反:我写道,我不是在寻找像 ucdetector 这样的工具。 +++ 我们都知道我需要一个,但这不是我的问题。 我不是要图书馆。
标签: java bytecode access-modifiers unreachable-code