Java-инспекции в IDEA 2023.2

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

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

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

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

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

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

yy09utrpvnogd5k7ivaq_k4reyo.png

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

vw2xjvddbnajwiy-0m3wh6q5lkg.png

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

Было:

mc0rkr79fpue7wxhn7c50ku8pmc.png

Стало:

wzm6hjrbxv21f3fediaiznubddu.png

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

xqt_tk_o6y_phssxlcejsupclrk.png

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

w1msoqo6-8rlws3vdnzjoe0-ov4.png

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

esu1c6h_0git_zzm56axy-yjay8.png

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

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

cwjgym3lxdoma568msiincpcjvy.png

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

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

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

tk4nskp95bc5-7kw7lzdcleufbu.png

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

g19ofame8kc5wnwvwfwqwfxn5gk.png

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

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

gbv4crf7-jkjiyd0_he8m9fpggq.png

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

h8oaj--e5kfnnjpjfpuegjs7x8k.png

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

ynjdetyfrowpiagfi8ja0h3thtc.png

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

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

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

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

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

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

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

© Habrahabr.ru