2016-06-08 7 views
3

Я пытаюсь использовать Project Lombok в своем коде, и я использую SonarQube и SonarLint (в IntelliJ IDEA).SonarQube @NoArgsConstructor (Project Lombok)

Когда я создаю новый класс с собственным полем, как это:

public class Test { 
    private String testfield; 
} 

я получить правильное предупреждение от SonarQube/SonarLint «Удалить это неиспользуемое частное поле» (squid:S1068) ... (Я Известно, что базовая конфигурация работает)

Когда я добавляю @Getter @Setter аннотации к полю:.

public class Test { 
    @Getter @Setter 
    private String testfield; 
} 

то предупреждения disapears (правильно!). (Так что я знаю, что 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 issue (и много дискуссий о stackoverflow, github, ...), и я думаю, что он должен работать.

(я использую IntelliJ 2016.1.3; SonarLint 2.2; Ломбок 1.16.8; SonarQube 5,5; SonarQube Java Plugin 3.13.1)

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

ответ

1

Edit: На SonarQube Java 3.14, в «[SONARJAVA-1642] - вопросы, связанных с Фильтрующими Ломбками аннотаций с выделенным фильтром вопроса» есть поддержка аннотирования классов с @lombok.experimental.UtilityClass без отключения, что предупреждения. @NoArgsConstructor может потребоваться запрос на вытягивание.

(source diff)


Ломбок знает @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 для билета.

+0

Спасибо за ваш ответ. Я уже видел этот запрос на растяжение. Знаете ли вы, есть ли какие-либо планы поддержать это дело SonarQube? Есть ли лучшее решение, чем аннотировать класс с помощью '@SuppressWarnings (" squid: S1118 ")'? –

+0

@CptS см. Редактирование. На этот раз я не забыл про это. – zapl

+0

Звучит здорово! Я попробую это вскоре после обновления плагина Java SonarQube. Спасибо! :) –