В новой версии IntelliJ IDEA JSpecify теперь будет автоматически подтягиваться через зависимости: Spring Boot 4, Spring Framework 7, JUnit 6, Guava 33.4+.
Звучит классно, но на этапе тестирования фичи разработчики быстро упёрлись в некоторые проблемы. Стоило добавить
@NullMarked, как IDE начинала закидывать сотнями предупреждений, причём даже в проектах, которые проходили NullAway на CI абсолютно чисто. Причина проста – спецификация намеренно оставляла свободу в интерпретации опредлённых сценариев в коде, что приводило к разногласиям между инструментами, например, между IntelliJ как IDE, и NullAway как CI инструмента.
В итоге JSpecify рисковал превратиться в ещё одну спецификацию наряду с JSR 305.
JetBrains, Spring и команда NullAway провернули следующее: сели, разобрали кейсы, устаканили своё понимание спецификации и пришли к единому результату в IntelliJ IDEA 2025.3 и в NullAway:
🟣 Предупреждения IDE теперь совпадают с NullAway в тех же сценариях
🟣 Cмешанные аннотации мигрируются намного мягче
🟣 Suppressions стали переносимыми
Работа над спецификацией идёт дальше: обсуждаются единые suppression-идентификаторы, новые аннотации для тонких null-контрактов и способы облегчить миграцию больших приложений.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/971390/