我正在尝试在我的代码中使用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)
任何帮助?
答案 0 :(得分: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"));
票证