如果要在将切面编入代码后对源代码进行推理,则应将切面编入源代码而不是二进制代码。
许多方面编织者进行二进制代码编织,因为他们无法访问编译器前端生成的信息(符号表、名称、类型、表达式类型……)。所以,黑客是,使用由编译器生成的虚拟机代码(这个特技基本上只适用于 VM 指令集,如 .net IL 和 java 类代码),通常很容易解码(漂亮的常规指令集)装饰符号表信息。
但是,如果您不能对这种编织过程的二进制结果进行推理,那么您就不能确定编织的程序没有错误,这就是 OP 原始问题的重点:“我如何运行 SCA 工具在(有效的)编织源上?”。
您可以通过两种方式解决此问题:
- 让社区编写处理字节码而不是源代码的 SCA 工具。这可能很难,因为源代码可能包含在编译过程中丢失的信息。
- 一个更好的主意:让切面社区编写操作源代码的切面编织器,并生成源代码。这可能很难,因为获得完整的语言前端很困难。
我无法帮助你让社区做出选择。
我可以大力鼓励社区选择第二种方式:我们的DMS Software Reengineering Toolkit。这是一个程序转换系统,它执行“如果你看到这个,用那个替换它”形式的指令,但通过将这些更改实际应用到由完整语言前端生成的编译器数据结构来尊重语言的语法和语义结束。(这是数学中方程代换的软件工程版本)。更改的数据结构可以重新导出为可编译的源文本,并带有注释。
如果您了解转换通常可以做什么,您会发现切面编织器是程序转换系统的一个特例。因此,使用 DMS 很容易实现方面编织器,并且结果是源代码,这意味着您可以应用源代码分析工具。
我怀疑这实际上解决了短期内分析 Roo 生成的代码的 OP 问题:-{