10

在 Java 5 和 Java 6 之间,关于源自接口(而不是超类)的方法的注释规则@Override发生了变化——在它们被禁止之前,但在它们被允许之后。但是,javac不需要它们。

某些 IDE,如 eclipse,可能会为此类丢失的覆盖生成错误或警告。我正在寻找可以检测丢失覆盖的任何类型的静态分析工具,因此我可以以编程方式报告/阻止它们。

它似乎不像我所知道的任何大的,比如 findbugs,等人可以做到 - 可能是因为@Override只有源保留级别,所以在这些工具运行的 .class 文件中不存在,源级别checkstyle 等工具无法理解完整的类层次结构。

4

3 回答 3

3

您可以在 Eclipse 中启用保存操作以自动添加缺少的 @Override 注释 - 请参阅 Window > Preferences > Java > Editor > Save Actions > Missing Code > Add missing annotations。

于 2012-06-15T16:48:57.530 回答
1

您显然需要处理 Java 源代码并允许您访问代码结构和属性的东西。

我了解 Eclipse 在 JDT 中有一些解析机制,您也许可以使用它。

我们的 DMS Software Reengineering Toolkit 具有完整的 Java 源代码解析器(包括属性捕获)、全名和类型解析,以及一次读取多个源文件的能力。DMS 旨在让您构建自己的自定义分析工具,因此您可以定义您坚持属性存在或不存在的条件。

因为 DMS 还提供程序转换功能,您甚至可以定义自定义规则,以便在明确应该存在哪些属性的地方修改源代码。

DMS 和 Java 语言规则不是易学的;这需要一些努力来配置。但如果你真的有成千上万的开发人员,这笔成本就会被无法控制他们正在做什么所淹没,所以投资是有意义的。

于 2013-03-12T03:43:34.740 回答
0

JArchitect可以通过使用 CQLinq 解决您的问题并执行这样的请求

从 t in Types where !t.HasAnnotation("Override") select t

当然,您可以根据需要自定义查询以添加其他条件。

于 2013-03-14T15:58:34.510 回答