簡體   English   中英

SonarQube @NoArgsConstructor(項目龍目島)

[英]SonarQube @NoArgsConstructor (Project Lombok)

我正在嘗試在我的代碼中使用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)

任何幫助?

編輯:從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"));

拉票請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM