【发布时间】: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 分析,这是我的构建步骤之一。