【问题标题】:SonarQube @NoArgsConstructor (Project Lombok)SonarQube @NoArgsConstructor(龙目岛项目)
【发布时间】:2016-10-08 21:42:22
【问题描述】:

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

有什么帮助吗?

【问题讨论】:

    标签: java intellij-idea sonarqube lombok sonarlint


    【解决方案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 用于购票。

    【讨论】:

    • 感谢您的回答。我已经看到了这个拉取请求。你知道 SonarQube 是否有计划支持这个案例?有没有比使用@SuppressWarnings("squid:S1118") 注释类更好的解决方案?
    • @CptS 看到编辑,希望我这次没有忽略……
    • 听起来不错!我会在升级 SonarQube Java 插件后尽快尝试。谢谢! :)
    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 2021-10-02
    • 2021-03-27
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多