【问题标题】:Prohibit brackets after method signature in Java codeJava代码中方法签名后禁止括号
【发布时间】:2019-05-20 04:30:57
【问题描述】:

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

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

我们使用 Checkstyle、PMD、ErrorProne 和 SonarLint,但这些工具都没有抱怨这种结构。是否有任何可以启用的规则或可用于防止此类代码的工具?

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

编辑

我正在对扩展名为 .groovy 的文件运行静态分析,SonarLint 说这段代码很好。将扩展名更改为 .java 后,它检测到问题。事实上,在更新到 8.18 Checkstyle 之后,它也正确地发现了它。

【问题讨论】:

  • 如果找不到合适的规则。考虑编写自己的正则表达式规则RegexpSinglelineJavaCheck
  • @Hulk 确实!我以错误的方式使用 SonarLint。请发表您的评论作为答案,我会接受。
  • 我用github.com/checkstyle/checkstyle/issues/6301添加了对checkstyle的支持
  • @RoyShahaf 愚蠢的错误:我在一个扩展名为 .groovy 的文件上运行它,SonarLint 说这段代码没问题。将扩展名更改为 .java 后,它检测到问题
  • 容易出错 does check for this,但严重性是 SUGGESTION。也许你可以增加严重性?

标签: java checkstyle pmd sonarlint errorprone


【解决方案1】:

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

此规则在 Java 的“Sonar way”质量配置文件中默认启用,并将其分类为“Code Smell”,默认严重性为“minor”。

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

【讨论】:

    【解决方案2】:

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

    https://github.com/checkstyle/checkstyle/issues/6301

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 2011-08-17
      • 2015-03-30
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2018-03-24
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多