声纳规则 - 重新排序接口默认方法的修饰符

时间:2014-07-12 12:54:17

标签: java java-8 sonarqube rule

我刚刚开始使用Sonar,我有一个JDK 8的项目。到目前为止,唯一的问题是:

Reorder the modifiers to comply with the Java Language Specification.

这种情况发生在接口中的默认方法,例如

default boolean isValid([params here]) { 
  /*method body here*/
}

我知道这确实是一个小问题,但我不想禁用任何规则,那么你如何修复它呢?

非常感谢!

P.S。我在谷歌上找不到任何东西,我知道这个规则意味着什么(我已经阅读了它的描述),但我无法弄清楚如何处理默认关键字。

更新:它看起来像一个错误,我已在此处报告,https://jira.codehaus.org/browse/SONARJAVA-590 更新2 :它似乎已经修复,并且可以在2.4版本中使用。

2 个答案:

答案 0 :(得分:5)

接口的方法声明语法包含在JLS, section 9.4

简而言之,方法修饰符必须位于方法标题之前,方法标题包括方法的返回类型。您的声明有一个方法修饰符default,其返回类型为boolean,因此除了

之外,此声明中没有其他可能的排列方式
default boolean isValid(/*parameters*/) { /*body*/ }

因此我认为这必定是Sonar的一个错误。

答案 1 :(得分:2)

您好,感谢您的反馈。

您可以查看支票的源代码:ModifiersOrderCheck(在撰写本文时指向上次提交的链接)

您将看到default修饰符未被检查,因为自Sonar-java-plugin支持Java 8以来未更新此规则。

所以它确实是一个bug,但它必须在java插件项目中报告,而不是在Mojo的声纳maven插件上报告。我创建了正确的票证:https://jira.codehaus.org/browse/SONARJAVA-590随意投票。