我开始研究项目和我需要分析源代码的任务之一,以便收集有关类及其方法的信息。更具体地说,对于每个方法,我需要知道它在整个方法体中使用哪些内部属性和外部对象(引用)。
我与我的主管讨论过,他们认为Bytecode操作库是要走的路。我已经看过BCEL,ASM和Javassist,但我不确定我需要使用哪一个。他们都提供了访问方法体的权限,在那里我可以看到所有说明并获得我需要的信息吗?
任何建议都会很感激。谢谢!
答案 0 :(得分:1)
如果你真的“需要分析源代码”,那么允许检查字节码的库是不可能的。
否则,您确实需要精确定义任务。或者,您要分析类,无论您是否要查看其源代码或字节代码,或者您想要分析源代码并考虑首先编译,然后分析编译结果。在后一种情况下,您必须将两个步骤的努力与替代解决方案进行比较,例如,合并直接源代码分析。
解析字节代码比分析源代码更容易,更容易,这就是在执行Java程序之前生成字节码的原因。为了回答您的具体问题,是的,所有三个库都为您提供了分析指令和相关信息的方法。哪一个最适合您的需求,问题是beyond the scope of Stackoverflow。
分析字节代码是否有帮助,取决于您的确切要求。在字段和方法访问方面,您可以使用该方法精确地获得大部分内容。只有内联编译时常量缺少它们的起源。在类型使用方面,您必须考虑到并非每个源代码工件都在字节代码中具有现有的对应物,例如,扩展的强制转换不产生实际的代码,并且局部变量通常没有声明的类型(抛开调试信息),但只有一个隐含的类型,这取决于它们实际使用的方式。除非包含调试信息,否则他们也没有关于泛型的信息。