SonarQube @NoArgsConstructor(Project Lombok)

时间:2016-06-08 14:36:59

标签: java intellij-idea sonarqube lombok sonarlint

我正在尝试在我的代码中使用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)

任何帮助?

1 个答案:

答案 0 :(得分: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