Могу ли я отключить жалобы CheckStyle для устаревших методов и классов? - PullRequest
5 голосов
/ 10 октября 2009

Я поддерживаю API, который объявил устаревшими некоторые открытые статические поля.

CheckStyle громко жалуется на них, но я бы предпочел, чтобы он полностью их игнорировал, так как я решил проблему, пометив поля как устаревшие.

В частности, в библиотеке есть константы для перечисления (public static final), но они не помечены как final. CheckStyle будет жаловаться на них, но я не могу просто изменить их на финальный, не нарушив контракт.

Мой план - пометить их как устаревшие, а затем удалить их. Но пометив их как устаревшие, они не удаляются из отчета CheckStyle.

1 Ответ

8 голосов
/ 10 ноября 2009

У меня есть два варианта для вас:

  1. подавить предупреждение для каждой строки вручную

    Этот подход менее гибок, так как вам приходится поддерживать конфигурацию подавления каждый раз, когда вы меняете линии. Но вы можете обрабатывать каждый случай индивидуально.

    <suppress checks="YOURCHECK" files=".*YOURCLASS\.java" lines="YOURLINES"/>
    

    Я не знаю, какая проверка вызывает вашу проблему, поэтому вы должны заменить YOURCHECK на правильное имя. YOURCLASS называет java-файл, который содержит устаревший код, но вы можете вставить .*, чтобы применить его к каждому файлу. YOURLINES - это список значений, разделенных запятыми, где каждое значение представляет собой целое число или диапазон целых чисел, обозначаемых целым числом-целым.

  2. используйте комментарий, чтобы посоветовать checkstyle игнорировать предупреждения

    Это решение позволяет вам отключить проверки для всех устаревших участников одновременно. Но вы должны следовать строгому соглашению. Вы должны добавить комментарий @deprecated к этим членам (что вы, вероятно, уже делаете) в самой последней позиции, потому что этот фильтр имеет строгий диапазон строк.

    /**
    * @deprecated I don't like this anymore.
    */
    public static String EXAMPLE = "example";
    

    Это решение требует изменения в вашем файле конфигурации. Сначала вы должны добавить FileContentsHolder как ребенок к TreeWalker.

    <module name="TreeWalker">
        ...
        <module name="FileContentsHolder"/>
        ...
    </module>
    

    Теперь вы можете настроить SuppressWithNearbyCommentFilter, который является частью Checker модуля.

    <module name="Checker">
        ...
        <module name="SuppressWithNearbyCommentFilter">
            <property name="commentFormat" value=".*deprecated.*"/>
            <property name="checkFormat" value=".*"/>
            <property name="influenceFormat" value="2"/>
        </module>
        ...
    </module>
    

    Если вы решили игнорировать только определенные проверки, настройте атрибут checkFormat. Или, если вы хотите использовать другой комментарий, измените атрибут commentFormat. Но очень важно, чтобы вы установили influenceFormat на правильное значение. Он сообщает checkstyle, через сколько строк после комментария он должен игнорировать эти проверки.

P.S .: Обратите внимание, что плагин Eclipse CheckStyle удаляет модуль FileContentsHolder, когда вы изменяете конфигурацию с помощью его пользовательского интерфейса, поэтому вы не должны его использовать.

...