Это ретроспективный пост про Java-инспекции IntelliJ IDEA 2023.2, в преддверии 2023.3 (которая сейчас в состоянии Beta 2). Несмотря на то, что эта версия вышла еще в июле, не все в точности помнят, что же там произошло, и какую версию они вообще используют.

А между тем, там не всё хорошо. Например, баги с тэгом @snippet до сих пор не поправили.

Чтобы самому воспроизвести новости из ченжлога - нужно набирать много кода и проверять их. Это лень, это мы не делаем. Вместо этого, мы смотрим этот короткий пост с PNG-картинками, показывающими основные фишки.

Итак, что нового?

В свежей Идее улучшился и расширился набор Java-инспекций, позволяющих быстрее искать косяки и повышать качество кода.

Инспекция Incorrect "MessageFormat" pattern предупредит тебя, когда ссылки внутри шаблона не походят на переданные аргументы.

Там же можно увидеть, что внутри MessageFormat не совпали кавычки и скобочки.

Идея научилась работать с прямым вызовом ChronoField и ChronoUnit и пытается предложить более точные варианты, чтобы сделать код более красивым.

Было:

Стало:

А еще, мы увидим ошибку, если неподдерживаемые константы ChronoField и ChronoUnit используют вместе с LocalTime и LocalDateTime.

Коданализ IDE теперь понимает диапазоны для методов get и getLong классов LocalDateTime и LocalTime. Ты получаешь предупреждения о лишних вызовах, которые можно заменить на константу внутри подходящего диапазона.

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

Подсветка и переходы для форматирующих строк

Поставьте курсор на описание формата, и IDE подсветит соовтетсвующий аргумент и все, что на него указывает. Чтобы прыгнуть с плейсхолдера под курсором на код, который ему соответствует, можно нажать Go To Declaration (Ctrl+B/⌘B).

Улучшенная поддержка тэга @snippet в Javadoc

Чтобы красиво отображать документацию, можно помечать код с помощью тэга @snippet.

Если изначальная запись выглядит как-то так:

То после нажатия кнопки рендеринга (слева вверху от комментария), оно выглядит вот так:

Эта форма записи поддреживает "регионы": можно сохранить кусок кода в отдельный файл и использовать его в документации.

Например, если изначальная запись выглядит так:

И мы сохранили сниппет в отдельный класс так:

То результирующий комментарий будет выглядеть вот так:

Важно, что сниппеты сейчас должны храниться в директории под названием snippet-files.

К сожалению, с этим связана проблема. Во-первых, сейчас создать такую директорию изнутри вьюхи Project нельзя, это неправильное имя пакета. Во-вторых, даже создав ее каким-то образом, переместить класс Snippets внутрь этой директории не получится, будет ошибка перемещения. Про это уже есть в трекере баги: раз, два.

Чёрт знает, как тестировали, и тестировали ли вообще эту фичу. Но сейчас есть чудесный обходный путь: нужно пойти в файловый менеджер (или в терминал), создать эту директорию самостоятельно, и переместить классы со сниппетами оттуда же как обычные файлы. Криво, но работает.

На сегодня пока всё, но там есть еще куча интересных вещей для освещения.

Подписывайтесь на два моих Telegram-канала:

Javawatch. Анонсы по Java: новости, митапы.

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

Комментарии (0)