2016-05-24 3 views
2

В моих настройках рабочего пространства Eclipse Neon я проверил [x] Enable annotation-based null analysis. Теперь, когда я делаю Assign statement to new variable из быстрой помощи, Eclipse иногда добавляет @NonNull к новой переменной. Так Intead линии 1, я линия 2:Eclipse Neon quick assist автоматически добавляет @NonNull

Deprecated annotation = Main.class.getAnnotation(Deprecated.class); // line 1 
@NonNull Deprecated annotation = Main.class.getAnnotation(Deprecated.class); // line 2 

Возникают два вопроса:

  1. Как включить и отключить такое поведение? Во втором проекте в той же рабочей области Eclipse этого не делает. Таким образом, это зависит не только от нулевого анализа на основе аннотаций, который был настроен в настройках рабочей области.

  2. Почему Затмение заключить annotation является @NonNull, а возвращаемое значение может быть ясно быть null (документация):

java.lang.annotation.Annotation java.lang.Class.getAnnotation(java.lang.Class annotationClass)

Возвращает аннотация этого элемента для указанного типа, если такие аннотация настоящее время, еще null.

ответ

2

Вы правы, Eclipse вычисляет неправильный нулевой аннотацию: @NonNull вместо @Nullable. Если вы use external null annotation и аннотируете метод возвращаемого типа java.lang.Class.getAnnotation(Class<A>) как @Nullable, то Назначение оператора новой переменной Быстрое исправление создает правильную нулевую аннотацию.

Чтобы отключить создание нулевых аннотаций, необходимо снять флажок [x] Use default annotations for null specification (ниже [x] Enable annotation-based null analysis). К сожалению, похоже, есть еще одна ошибка: при щелчке на флажке открывается диалоговое окно Аннотации для нулевых спецификаций.. В качестве обходного пути для этой ошибки укажите первичный как вторичную аннотацию и n.a в качестве основной аннотации для каждой аннотации.

Не могли бы вы ответить report both bugs to Eclipse?

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