2017-01-18 3 views
2

Checkstyle жалуется на значения перечисления, не имеющие прикрепленного комментария javadoc. Но, по крайней мере, во многих из моих перечислений, поскольку сами ценности часто не требуют пояснений, добавление javadoc просто уменьшает удобочитаемость с ненужным беспорядком. Рассмотрим следующие примеры:Как отключить предупреждение javadoc checkstyle для констант/значений enum?

/** 
* Example enum to illustrate the problem. Each value of this 
* enum represents a day of the week. 
*/ 
public enum DaysOfWeekClean { 

    SUNDAY, 
    MONDAY, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY, 
    SATURDAY; 

} 
/** 
* Example enum to illustrate the problem. Each value of this 
* enum represents a day of the week, with comments added to each 
* distinct value to make the point. 
*/ 
public enum DaysOfWeekCluttered { 

    /** 
    * The day of the week named "Sunday". 
    */ 
    SUNDAY, 

    /** 
    * The day of the week named "Monday". 
    */ 
    MONDAY, 

    /** 
    * The day of the week named "Tuesday". 
    */ 
    TUESDAY, 

    /** 
    * The day of the week named "Wednesday". 
    */ 
    WEDNESDAY, 

    /** 
    * The day of the week named "Thursday". 
    */ 
    THURSDAY, 

    /** 
    * The day of the week named "Friday". 
    */ 
    FRIDAY, 

    /** 
    * The day of the week named "Saturday". 
    */ 
    SATURDAY; 

} 

Если модуль JavadocVariable добавляется в мои чеки, первый пример (DaysOfWeekClean) будет помечено, в то время как второй пример (DaysOfWeekDirty) будет проходить.

И это оставляет меня в дилемме. Я хочу, чтобы checkstyle помещал нормальные члены класса/переменные, которые не комментируются, но оставлять константы перечисления в отдельности. После довольно небольшого поиска в документации Checkstyle (и самого исходного кода Checkstyle) и нескольких вопросов StackOverflow я не могу понять, как это установить.

Я могу предупредить, когда javadoc отсутствует в как константы перечисления, так и члены класса/переменные, или я могу игнорировать оба варианта, но я не могу проверить один, а не другой.


Для справки, вот некоторые Checkstyle конфигурации, которые я пытался, и их результаты:

  1. Простая декларация, которая предупреждает, когда оба члена класса или перечисления константа не имеет Javadoc:

    <module name="JavadocVariable" /> 
    
  2. Декларация, которая предупреждает, что когда член класса или константа перечисления не имеет javadoc:

    <module name="JavadocVariable"> 
        <property name="tokens" value="VARIABLE_DEF" /> 
    </module> 
    
  3. декларация, которая не может предупредить, когда либо член класса или перечисления константа не имеет Javadoc:

    <module name="JavadocVariable"> 
        <property name="tokens" value="ENUM_CONSTANT_DEF" /> 
    </module> 
    
+0

См. Http://stackoverflow.com/questions/4023185/how-to-disable-a-particular-checkstyle-rule-for-a-particular-line-of-code, с // CHECKSTYLE: OFF comment then вы сможете легко отключить обработку checkstyle для определенного раздела кода. – RealHowTo

ответ

3

Для того, чтобы пропустить значения перечислений, вы можно настроить проверку следующим образом:

<module name="JavadocVariable"> 
    <property name="tokens" value="VARIABLE_DEF"/> 
</module> 

documentation от 2017-01-18 является missing this information, но это планируется исправить.
Я тестировал это поведение с Eclipse-CS 6.14, поэтому, если он больше не работает для вас, это будет ошибкой.

1

Вы можете подавить предупреждения Checkstyle либо в SuppressionCommentFilter, или из Checkstyle 5.7 при помощи функции @SuppressWarnings аннотация.

Вам понадобится выполнить настройку конфигурации checkstyle.xml.

комментариев

Добавьте SuppressionCommentFilter к вашему checkstyle.xml:

<module name="SuppressionCommentFilter"/> 

Затем добавить комментарии к коду, чтобы Checkstyle от & обратно.

//CHECKSTYLE:OFF 
public enum DaysOfWeek { 
    //.. 
//CHECKSTYLE:ON 

аннотации

Если вы предпочитаете аннотации, вы можете использовать SuppressWarningsFilter. Обратите внимание, что для этого нужен модуль SuppressWarningsHolder. Добавьте оба эти модуля в TreeWalker в свой стиль проверки.xml:

<module name="TreeWalker"> 
    <!-- make @SuppressWarnings annotations available to Checkstyle, and filter warnings by annotation 
    --> 
    <module name="SuppressWarningsHolder" /> 
    <module name="SuppressWarningsFilter" /> 
</module> 

Теперь вы можете аннотировать свои перечисления с предупреждением, которое вы хотите исключить. Используйте соответствующий код предупреждения & checkstyle должен его подавить.

@SuppressWarnings("checkstyle:<appropriate warning here>") 
public enum DaysOfWeek { 
    //.. 

Ссылки:

+0

Спасибо за очень хороший ответ! Я думаю, что другой из них больше того, что я искал, но это какое-то фантастическое объяснение/документация по подавлению предупреждений в стиле чеков! – bertag

Смежные вопросы