我正在尝试在我的代码中使用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可能需要一个拉取请求.
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为机票.