4

我正在尝试在我的代码中使用 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 问题(以及关于 stackoverflow、github、...的许多讨论),我认为它应该可以工作。

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

有什么帮助吗?

4

1 回答 1

2

编辑:从SonarQube Java 3.14 开始,在“[ SONARJAVA-1642 ] - 使用专用问题过滤器过滤与 Lombok 注释相关的问题”中,支持在@lombok.experimental.UtilityClass不触发该警告的情况下对类进行注释。@NoArgsConstructor可能需要拉取请求。

来源差异


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"));

票证的拉取请求

于 2016-06-08T14:45:04.033 回答