我发现了SonarLint,SonarScanner的bug /问题,它显示了与NonNull注释(Java)相关的误报问题,规则:“squid:S2637”,标题:“'@NonNull'值不应该设置为null“代码如下:
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,我发现了以下类的另一个问题:
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;
}
}
答案 0 :(得分:0)
您在MyObject
类中报告的第一个FP是已知的错误,已在SonarJava 4.7中修复(请参阅SONARJAVA-1776)。这与使用this.
访问的字段无关,而我们的符号执行引擎无法正确识别这些字段。最新版本的SonarJava包含修复程序,因此更新后问题消失是合乎逻辑的。
您在DeviceInfo
课程中报告的第二个FP与以下问题SONARJAVA-2227有关。该问题尚未得到解决,目前计划用于SonarQube SonarJava分析仪的 4.10 版本。