我在SonarLint,SonarScanner中发现了错误/问题,它显示了与NonNull注释(NonNull)相关的假阳性问题,规则:“squid:S 2637”,标题:“@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 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;
}
}发布于 2017-04-12 12:33:54
在MyObject类中,您报告的第一个FP是一个已知的bug,它已经在SonarJava 4.7中修复(参见索纳贾瓦-1776)。这与我们的符号执行引擎无法正确识别用this.访问的字段有关。SonarJava的最新版本包含了修复程序,因此在更新后问题消失是合乎逻辑的。
在DeviceInfo类中,您报告的第二个FP与以下问题SONARJAVA-2227有关。这个问题还没有解决,目前计划在4.10版本的SonarQube SonarJava分析器上使用。
https://stackoverflow.com/questions/43115134
复制相似问题