2015-05-18 2 views
-1

Я только что нашел класс ошибок в нашей системе, относящийся к использованию ZoneOffset.UTC, а не ZoneId.of("UTC") с новым API Java 8 ZonedDateTime. В идеале, чтобы убедиться, что они не появляются снова в будущем, я хотел бы вызвать предупреждение об использовании ZoneOffset в любом месте в нашей базе кода.Предупреждать об использовании проблемных классов

Если бы это было в нашем коде, я бы @Deprecated аннотировать класс, и это решит проблему. Однако, поскольку это в библиотеках JVM, я не могу этого сделать.

У нас есть PMD, Checkstyle и найдите ошибки в системе сборки в настоящее время. Если требуется какая-то еще вещь, которая, вероятно, может быть организована, но я предпочел бы способ с одним из них.

+0

Почему вы заботитесь о том, что внутренние органы используют это свойство? Лучший вопрос: если вы знаете, какие внутренние элементы используют это свойство, не могли бы вы найти способ избежать их использования, если это окажется вредным? – Makoto

+0

@Makoto Мне все равно, если внутренности используют этот класс. Мне небезразлично, когда наш код использует этот класс, так как при изменении DST ZoneOffsets не ускоряются. Там, чтобы использовать его в наших тестах и ​​другом коде, это не очень хорошая идея, я могу просто рекомендовать, чтобы люди не использовали его, но я предпочел бы, чтобы кто-то был предупрежден, прежде чем они найдут ошибку, подобную той, которую я только что исправил. –

ответ

0

Проверить, что стиль имеет функцию, позволяющую делать то, что мне нужно.

Эта функция называется Import Control. Чтобы настроить его, вам необходимо добавить следующее в качестве дочернего элемента модуля TreeWalker. У нас уже был раздел для этого. Возможно, вам придется добавить его.

<module name="ImportControl"> 
    <property name="file" value="import-control.xml"/> 
    </module> 

Убедитесь, что путь к файлу действителен для вашего проекта. Вы можете установить для свойства severity значение error, если вы хотите, чтобы это было ошибкой.

Далее вам нужно создать файл import-control.xml по пути, указанному в конфиге. Он должен выглядеть следующим образом:

<?xml version="1.0"?> 
<!DOCTYPE import-control PUBLIC 
     "-//Puppy Crawl//DTD Import Control 1.1//EN" 
     "http://www.puppycrawl.com/dtds/import_control_1_1.dtd"> 
<import-control pkg="com.ijento.zeus"> 
    <allow class=".*" regex="true" /> 
    <disallow class="java.time.ZoneOffset" exact-match="true"/> 
</import-control> 

Для всех остальных классов требуется тег «Разрешить все». Запрет останавливает импорт класса, который вы хотите заблокировать. Порядок этих вопросов. Похоже, вы оцениваете правила сверху вниз. Если «разрешить все» находится внизу, он позволяет все.

Более подробную информацию можно найти здесь: http://checkstyle.sourceforge.net/config_imports.html#ImportControl

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