Java代码中方法签名后的方括号

时间:2018-12-19 16:25:34

标签: java checkstyle pmd sonarlint errorprone

最近在我的项目中,我遇到了可以完美编译的代码,但是对于任何读者来说都是非常令人惊讶的,并且不应通过静态分析。

class BracketsAfterMethodSignature {
  Object emptyArray()[] {
    return new Object[]{};
  }
}

我们使用Checkstyle,PMD,ErrorProne和SonarLint,但是这些工具都没有抱怨这种构造。有没有可以启用的规则或可以用来阻止此类代码的工具?

显然Checkstyle的ArrayTypeStyle不包含这种情况。

编辑

我正在对扩展名为.groovy的文件进行静态分析,SonarLint说这段代码很好。将扩展名更改为.java后,它检测到该问题。确实,在更新到8.18之后,Checkstyle也可以正确识别它。

2 个答案:

答案 0 :(得分:3)

声纳具有规则squid:S1195 Array designators "[]" should be located after the type in method signatures

默认情况下,此规则在Java的“声纳方式”质量配置文件中启用,并将其分类为“代码气味”,默认严重性为“次要”。

因此,SonarLint应该突出显示问题中的代码-在我的测试中,eclipse插件“ SonarLint for Eclipse”版本4.0.0.201810170711正确地在方法声明后的左括号中放置了一个标记(在没有配置的SonarQube服务器连接)。 Eclipse版本为2018-09 (4.9.0)

答案 1 :(得分:1)

Checkstyle的ArrayTypeStyle将支持方法定义上的打印违规行为,其中在方法名称上放置方括号,而不是从版本8.18开始的返回类型。

请参见https://github.com/checkstyle/checkstyle/issues/6301