SonarLint、SonarScanner Bug(非空注解)
SonarLint, SonarScanner Bug (NonNull annotation)
我发现 bug/issue 使用 SonarLint、SonarScanner,它显示 false-positive 与 NonNull 注释 (Java)、规则:"squid:S2637"、标题:“对于以下代码,“@NonNull”值不应设置为空值:
public class MyObject {
@NonNull
public final String text;
public MyObject(@NonNull final String text) {
this.text = text; // SonarLint shows issue in this place
}
}
但是下面的代码没有问题(我同意):
public class MyObject {
private final String text;
public MyObject(@NonNull final String text) {
this.text = text;
}
@NonNull
public String getText() {
return text;
}
}
使用 Java Analyzer 4.8.0.9441,我发现另一个问题 class:
public class DeviceInfo {
public final long id;
@NonNull
public final String model;
@NonNull
public final String osVersion;
public DeviceInfo(@NonNull final String model, @NonNull final String osVersion) {
this(0, model, osVersion); //ISSUE: In this place Squid reports about uninitialized non-null fields
}
public DeviceInfo(final long id, @NonNull final String model, @NonNull final String osVersion) {
this.id = id;
this.model = model;
this.osVersion = osVersion;
}
}
您在 MyObject
class 中报告的第一个 FP 是一个已知错误,已在 SonarJava 4.7 中修复(参见 SONARJAVA-1776)。这与使用 this.
访问的字段未被我们的符号执行引擎正确识别的事实有关。最新版本的 SonarJava 包含修复程序,因此问题在更新后消失是合乎逻辑的。
您在 DeviceInfo
class 中报告的第二个 FP 与以下问题有关 SONARJAVA-2227。该问题尚未得到解决,目前计划用于 SonarQube SonarJava 分析器的 4.10 版本。
我发现 bug/issue 使用 SonarLint、SonarScanner,它显示 false-positive 与 NonNull 注释 (Java)、规则:"squid:S2637"、标题:“对于以下代码,“@NonNull”值不应设置为空值:
public class MyObject {
@NonNull
public final String text;
public MyObject(@NonNull final String text) {
this.text = text; // SonarLint shows issue in this place
}
}
但是下面的代码没有问题(我同意):
public class MyObject {
private final String text;
public MyObject(@NonNull final String text) {
this.text = text;
}
@NonNull
public String getText() {
return text;
}
}
使用 Java Analyzer 4.8.0.9441,我发现另一个问题 class:
public class DeviceInfo {
public final long id;
@NonNull
public final String model;
@NonNull
public final String osVersion;
public DeviceInfo(@NonNull final String model, @NonNull final String osVersion) {
this(0, model, osVersion); //ISSUE: In this place Squid reports about uninitialized non-null fields
}
public DeviceInfo(final long id, @NonNull final String model, @NonNull final String osVersion) {
this.id = id;
this.model = model;
this.osVersion = osVersion;
}
}
您在 MyObject
class 中报告的第一个 FP 是一个已知错误,已在 SonarJava 4.7 中修复(参见 SONARJAVA-1776)。这与使用 this.
访问的字段未被我们的符号执行引擎正确识别的事实有关。最新版本的 SonarJava 包含修复程序,因此问题在更新后消失是合乎逻辑的。
您在 DeviceInfo
class 中报告的第二个 FP 与以下问题有关 SONARJAVA-2227。该问题尚未得到解决,目前计划用于 SonarQube SonarJava 分析器的 4.10 版本。