SonarQube @NoArgsConstructor (Project Lombok)

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 issue(以及许多在stackoverflow、github等地方的讨论),我认为它应该可以工作。
(我正在使用IntellIJ 2016.1.3;SonarLint 2.2;lombok 1.16.8;SonarQube 5.5;SonarQube Java插件3.13.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"));

这是与该问题相关的pull请求


谢谢你的回答。我已经看到了这个拉取请求。你知道SonarQube是否有支持这种情况的计划吗? 除了使用@SuppressWarnings("squid:S1118")注释类之外,是否有更好的解决方案? - Josef Reichardt
@CptS 看一下修改,希望这次我没有忽略什么。 - zapl
听起来很不错!我会在升级SonarQube Java插件后尽快尝试。 谢谢! :) - Josef Reichardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接