【问题标题】:SonarQube false-positive "unused private methods should be removed" in static method静态方法中的 SonarQube 误报“应删除未使用的私有方法”
【发布时间】:2024-01-15 12:11:01
【问题描述】:

示例代码:

public static String foo(){
 return bar();
}

private static String bar(){
 return "";
}

SonarQube 将 bar() 函数标记为未使用,但 SonarLint(IntelliJ,版本 2.7.1.1640)工作正常。 我已经安装了最新版本的 SonarQube (6.2) 和最新版本的 Java 插件 (4.5.0.8398),但仍然有这个问题 - 我认为这个问题已经解决了吗? 这是某种回归错误吗? 感谢您的帮助。

更新:

上面的例子太简单了,我设法指定问题:它看起来像传递给函数的原始参数的问题,例如这被标记为未使用:

public static String foo( SomeClass a ) {
    return bar( a.getChar() );
  }

  private static String bar( char a ) {
    return String.valueOf( a );
  }

如果我将硬编码值传递给 bar(如 bar('a') ),一切正常(甚至当我传递 bar("string".charAt(0) ) 之类的东西时)。 SomeClass.getChar() return 'char' 所以这不是装箱原语的问题。

解决方案: 正如@Michael - SonarSource 团队所建议的那样,依赖字节码存在问题。我禁用了 teamcity Sonar runner 插件,现在通过 Gradle 插件运行 sonarqube。

【问题讨论】:

  • 在某种支持论坛或 SonarQube 上的错误跟踪器上问这个怎么样?
  • 无法以相同的配置重现。您确定在对 SonarQube 执行分析时提供文件的字节码吗?
  • John - 你说得对,我应该也可能会将此作为错误发送给 SonarQube,但我想确定这不是我的错误。 @Michael-SonarSourceTeam - 请查看我的更新。
  • @szymonszymon 在我看来,分析器无法访问“SomeClass”字节码,因此无法解析方法调用的返回类型。如果该方法也返回“char”,则不能是简单的装箱问题。 SonarLint 应该正确地提供依赖关系,而 SonarQube 扫描不是。您如何执行 SonarQube 分析?
  • @Michael-SonarSourceTeam 我通过 Teamcity(版本 116)中的 Sonar runner 插件执行 SonarQube 分析,这是我的构建步骤之一。

标签: java sonarqube


【解决方案1】:

很多时候,sonar server 和 sonar lint 同步有问题,不是这个问题,其他问题也有重复,比如重复代码。参考 sonar server 并尝试解决

【讨论】:

  • “参考声纳服务器并尝试解决”是什么意思!?对我来说,这似乎更像是 SonarQube 分析的配置错误,而 SonarLint 本身表现良好。