@NotNull от JetBrains работает только тогда, когда проект построен из IDEA

Я написал простой проект, чтобы научиться работать с проверкой аннотаций. Для этой цели я добавил зависимость от maven (также я пробовал javax.validation, которая у меня не работает):

<dependency>
    <groupId>org.jetbrains</groupId>
    <artifactId>annotations</artifactId>
    <version>15.0</version>
</dependency> 

и использовал его следующим образом:

public boolean add(@NotNull T entry){ ...

Когда я собираю проект из IDEA, все нормально, но при компиляции кода командой maven не работает. В декомпилированном файле класса я заметил, что IDEA компилирует мои классы по-другому. Он добавляет эту проверку:

if (entry == null) {
    $$$reportNull$$$0(0);
}

А мавен нет.

Я делаю что-то не так? Пожалуйста, скажите мне, как это следует использовать (независимо от проверки jetbrains или javax).


person Grofight    schedule 20.12.2016    source источник
comment
Возможный дубликат Почему аннотация @Nonnull проверяется во время выполнения?   -  person Vadim Kirilchuk    schedule 04.04.2017
comment
Это функция IntelliJ IDEA 2016.3 (хотя и не очень приятная).   -  person Vadim Kirilchuk    schedule 04.04.2017


Ответы (3)


Частично угадал: видите ли, это не "IDEA" ставит эту дополнительную проверку в байт-код.

Дело в том, что аннотации также можно использовать для генерации кода (см. здесь для дальнейшего чтения). И как вы можете видеть из этой ссылки; основная вещь для генерации кода заключается в следующем: для этой аннотации требуется класс javax.annotation.processing.Processor. И это будет использоваться компилятором, чтобы превратить аннотацию исходного кода во что-то разумное в байтовом коде.

Если я правильно вас понимаю, вам не удалось настроить эти части javax для компиляции maven. Так что, вероятно, здесь не хватает одной части; поэтому решение состоит в том, чтобы исправить вашу настройку maven, чтобы обеспечить все необходимые зависимости.

person GhostCat    schedule 20.12.2016

Ваша аннотация @NotNull кажется частью плагина IntelliLang, разработанного для поддержки кодирования в IDEA (т.е. помогает в контрактном кодировании). Я сомневаюсь, что он доступен за пределами IDEA.

Прежде чем приступить к работе с языковыми инъекциями, убедитесь, что подключаемый модуль IntelliLang включен. Плагин связан с IntelliJ IDEA и активирован по умолчанию.

Я мало что об этом знаю, поэтому передайте привет ссылка

javax.validation, с другой стороны, предназначен для совсем других вещей. Он проверяет действительность содержимого объекта данных с помощью Bean Validation из JavaEE

person Jakub Ch.    schedule 20.12.2016

Плагин Maven был создан, чтобы делать то же самое для сборок Maven:

https://github.com/osundblad/intellij-annotations-instrumenter-maven-plugin

По умолчанию он работает только с аннотациями JetBrains.

person seanf    schedule 10.08.2020