java – SonarQube @NoArgsConstructor(Project Lombok)

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

当我用这样的私有字段创建一个新类时:

public class Test {
    private String testfield;
}

然后我从SonarQube / SonarLint那里得到了正确的警告“删除这个未使用的私有字段”(squid:S1068)…(所以我知道基本配置正在运行.)

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

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

然后警告消失(正确!). (所以我知道SonarQube基本上理解Lombok注释.)

现在当我创建另一个这样的类时

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

我收到警告“添加一个私有构造函数”(squid:S1118)……(这又是正确的和预期的)

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

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

警告仍然存在.

SonarQube不支持此注释吗?
我发现这个JIRA issue(以及关于stackoverflow,github的许多讨论……),我认为它应该可行.

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

任何帮助?

最佳答案 编辑:截至
SonarQube Java 3.14,在“[
SONARJAVA-1642] – 使用专用问题过滤器过滤与Lombok注释相关的问题”,支持使用
@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为机票.

点赞