代码分析工具和类型间声明

我有一个由Spring Roo生成的maven项目,并使用几个工具(checkstyle,pmd等)来收集有关我的项目的信息。 (即我正在使用codehaus’声纳 )

Roo大量使用AspectJ Inter Type声明(ITD)来分离诸如持久性,javabeans-getter / setter等问题。

这些ITD在编译时编织,因此checkstyle和pmd(在源级别工作)等工具有很多误报。

我目前看到的唯一解决方案是停用对使用ITD的类的检查。

还有更好的想法?

这个答案现在对你没有帮助,但希望它对你有用,因为它承诺在不久的将来解决你的问题。 我不知道您是否了解JetJrains的IntelliJ IDEA – Java IDE,但是已经在这方面做了工作,这里是您可能想要遵循的专用问题的链接: http://youtrack.jetbrains .net / issue / IDEA-26959 。 只需设置一个手表 – 并在function实施时得到通知。 IntelliJ IDEA提供了非常强大的SCA。 因此,ITD支持也应该是高质量的。

怀疑它将是一个“利基问题”更长时间:-)希望工具供应商将看到必要的增强function。

FindBugs和Cobertura都不能在源级别上工作,而是在字节码级别上工作。 因此,您应该在编译时静态地(也可以使用maven的AspectJ插件)在您的方面挥手(而不是在加载时),然后在结果字节码上运行静态分析工具。

如果你想在方面编织到代码之后推理源代码,你应该将方面编织到源代码而不是二进制代码中。

许多方面编织者进行二进制代码编织,因为他们无法访问编译器前端生成的信息(符号表,名称,类型,表达式类型……)。 所以,黑客是,使用编译器生成的虚拟机代码(这个特技基本上只适用于.net IL和java类代码等VM指令集),这些代码通常很容易解码(漂亮,常规指令集)符号表信息。

但是如果你无法推断出这样一个编织过程的二进制结果,那么你就不能确定编织程序没有错误,这是OP原始问题的重点:“我如何运行SCA工具(有效)编织源?“

您可以通过以下两种方式修复:

  • 让社区编写处理字节代码而不是源代码的SCA工具。 这可能很难,因为源代码可能包含编译过程中丢失的信息。
  • 更好的想法:让Aspect社区编写操作源代码的方面编织器,并生成源代码。 这可能很难,因为难以获得完整的语言前端。

我无法帮助你让社区做出选择。

我可以大力鼓励社区选择第二种方式:我们的DMS软件再造工具包 。 这是一个程序转换系统,它执行以下forms的指令:“如果你看到这个 ,用它替换它”,但通过将这些改变实际应用于由完整语言前端生成的编译器数据结构来表达语言的语法和语义。结束。 ( 这是数学中等式替换的软件工程版本 )。 已更改的数据结构可以作为可编译的源文本重新导出,并带有注释。

如果您了解一般转换可以做什么,您可以看到方面编织器是程序转换系统的特例 。 因此,使用DMS实现方面编织器很容易,结果是源代码,这意味着您可以应用源代码分析工具。

我怀疑这实际上解决了OP在短期内分析Roo生成代码的问题: – {

您是否可以向Java代码添加特定于工具的注释/注释以抑制误报? 例如,FindBugs有自己的@SuppressWarnings注释。