0

我开始从事一个项目,其中一项任务是我需要分析源代码以收集有关类及其方法的信息。更具体地说,对于每个方法,我需要知道它在整个方法体中使用了哪些内部属性和外部对象(引用)。

我与我的主管讨论过,他们认为字节码操作库是可行的方法。我已经看过 BCEL、ASM 和 Javassist,但我不确定我需要使用哪一个。它们是否都提供对方法主体的访问,我可以在其中查看所有说明并获取我需要的信息?

任何建议将不胜感激。谢谢!

4

1 回答 1

1

如果您真的“需要分析源代码”,那么允许检查字节码的库不是可行的方法。

否则,你真的需要精确地定义你的任务。要么,你将要分析类,不管你是看它们的源代码还是字节码,或者你想分析源代码并考虑先编译,然后分析编译结果。在后一种情况下,您必须将这两个步骤的工作量与替代解决方案进行比较,例如,可能包含直接源代码分析。

解析字节码是相当容易的,比分析源代码更容易,这就是为什么字节码在Java程序执行之前产生的原因。要回答您的具体问题,是的,所有三个库都为您提供了一种分析说明和相关信息的方法。哪一个最适合您的需求,这是一个超出 Stackoverflow 范围的问题。

分析字节码是否有帮助,取决于您的确切要求。当涉及到字段和方法访问时,您可以准确地使用该方法获得其中的大多数。只有内联的编译时常量缺少它们的起源。当涉及到类型使用时,您必须考虑并非每个源代码工件在字节码中都有现有的对应物,例如,扩大转换不会产生实际代码,并且局部变量通常没有声明的类型(调试信息除外) ,但只是一个隐含的类型,这取决于它们的实际使用方式。他们也没有关于泛型的信息,除非已包含调试信息。

于 2015-09-16T10:41:09.087 回答