SonarQube @NoArgsConstructor(龙目岛项目)

SonarQube @NoArgsConstructor (Project Lombok)

我正在尝试在我的代码中使用 Project Lombok,我正在使用 SonarQube 和 SonarLint(在 IntelliJ IDEA 中)。

当我创建一个带有私有字段的新 class 时:

public class Test {
    private String testfield;
}

然后我从 SonarQube/SonarLint "Remove this unused private field" (squid:S1068) 得到正确的警告...(所以我知道基本配置正在工作。)

当我向字段添加 @Getter @Setter 注释时:

public class Test {
    @Getter @Setter
    private String testfield;
}

然后警告消失(正确!)。 (所以我知道SonarQube基本都懂Lombok注解)

现在当我像这样创建另一个 Class

public class Test2 {
    public static void doSomething() {
        System.out.println("hey");
    }
}

我收到警告 "Add a private constructor" (squid:S1118)...(这又是正确的和预期的)

但是当我现在像这样添加 @NoArgsConstructor 注释时

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Test2 {
    public static void doSomething() {
        System.out.println("hey");
    }
}

警告仍然存在。

SonarQube不支持这个注解吗? 我发现了这个 JIRA issue(以及许多关于 Whosebug 的讨论,github,...),我认为它应该有效。

(我正在使用 IntellIJ 2016.1.3;SonarLint 2.2;lombok 1.16.8;SonarQube 5.5;SonarQube Java 插件 3.13.1)

有帮助吗?

编辑:截至 SonarQube Java 3.14, in "[SONARJAVA-1642] - Filter issues related to Lombok annotations with a dedicated issue filter" there is support for annotating your classes with @lombok.experimental.UtilityClass 没有触发该警告。 @NoArgsConstructor 可能需要拉取请求。

(source diff)


Lombok 知道 @NoArgsConstructor 但它只用它来确定一个类型是否未使用。检查实用程序 类.

的构造函数时不考虑它
+  private static final Set<String> USED_TYPES_ANNOTATIONS = new HashSet<String>(Arrays.asList(
+    "lombok.Getter",
+    "lombok.Setter",
+    "lombok.Data",
+    "lombok.Value",
+    "lombok.Builder",
+    "lombok.ToString",
+    "lombok.EqualsAndHashCode",
+    "lombok.AllArgsConstructor",
+    "lombok.NoArgsConstructor",
+    "lombok.RequiredArgsConstructor"));

pull-request求票