SonarQube @NoArgsConstructor (Проект Ломбок)

Я пытаюсь использовать 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 в основном понимает аннотации Ломбока.)

И теперь, когда я создаю еще один класс, подобный этому

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,... ), и я думаю, что это должно работать.

(Я использую IntelIJ 2016.1.3; SonarLint 2.2; lombok 1.16.8; SonarQube 5.5; SonarQube Java Plugin 3.13.1)

Любая помощь?


person Josef Reichardt    schedule 08.06.2016    source источник


Ответы (1)


Изменить: Начиная с SonarQube Java 3.14, в "[SONARJAVA-1642] — фильтровать проблемы, связанные с аннотациями ломбока, с помощью специального фильтра задач. " существует поддержка аннотирования ваших классов с помощью @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"));

запрос на получение запроса.

comment
Спасибо за Ваш ответ. Я уже видел этот запрос на включение. Знаете ли вы, есть ли какие-либо планы поддержки этого дела со стороны SonarQube? Есть ли лучшее решение, чем аннотировать класс с помощью @SuppressWarnings("squid:S1118")? - person Josef Reichardt; 09.06.2016
comment
@CptS см. редактирование, надеюсь, на этот раз я ничего не упустил. - person zapl; 09.06.2016
comment
Звучит здорово! Я попробую это вскоре после обновления плагина SonarQube Java. Спасибо! :) - person Josef Reichardt; 09.06.2016