SonarLint,SonarScanner Bug(NonNull注释)

时间:2017-03-30 10:26:07

标签: java sonarqube analyzer sonarlint

我发现了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;
      }
  }

1 个答案:

答案 0 :(得分:0)

您在MyObject类中报告的第一个FP是已知的错误,已在SonarJava 4.7中修复(请参阅SONARJAVA-1776)。这与使用this.访问的字段无关,而我们的符号执行引擎无法正确识别这些字段。最新版本的SonarJava包含修复程序,因此更新后问题消失是合乎逻辑的。

您在DeviceInfo课程中报告的第二个FP与以下问题SONARJAVA-2227有关。该问题尚未得到解决,目前计划用于SonarQube SonarJava分析仪的 4.10 版本。