Невозможно аннотировать как @NonNull, так и @NonNull

Я использую IntelliJ 13.1.5 и Java 8 SDK, и я настроил встроенную проверку IntelliJ на нуль, чтобы использовать checkers.nullness.quals.NonNull в качестве аннотации по моему выбору.

Теперь, когда я пишу такой простой класс

import checkers.nullness.quals.NonNull;

public class Myclass  {
    public void doSomething(@NonNull String someString) {
    }
}

IntelliJ подчеркивает аннотацию @NonNull предупреждением

Невозможно аннотировать как @NonNull, так и @NonNull

Сначала я подумал, что это как-то связано с классами, которые реализуют интерфейс, который также имеет методы, аннотированные с помощью @NonNull.

Но я также сталкиваюсь с конкретными классами, как в примере выше.

Мое следующее предположение заключалось в том, что несколько библиотек используют одно и то же имя аннотации, и может возникнуть конфликт имен. Но, к сожалению, в предупреждении не указано точное имя класса с пакетами. Если это так, должен быть какой-то параметр, разрешающий неявные аннотации.

Как я могу избавиться от этого предупреждения, не удаляя аннотацию?


person jaw    schedule 27.10.2014    source источник
comment
Возможно, связано: stackoverflow.com/ вопросы/4963300/   -  person chrylis -cautiouslyoptimistic-    schedule 27.10.2014


Ответы (2)


Это похоже на ошибку в IDEA. По историческим причинам многие инструментальные средства будут рассматривать любые аннотации с определенными простыми именами (например, NonNull) как эквивалентные, и похоже, что IDEA может иметь некоторые коллизии. Вы должны сообщить об этом как об ошибке в JetBrains.

person chrylis -cautiouslyoptimistic-    schedule 27.10.2014
comment
В openapi (intellij core) iirc есть внутренняя аннотация NonNull. Я не уверен, что здесь может быть конфликт. - person vikingsteve; 27.10.2014

Я только что получил ответ на вопрос, который помог мне решить проблему. Я до сих пор не уверен, была ли это моя вина или это ошибка, но вот решение:

IntelliJ имеет (по крайней мере) два места в настройках проекта, где вы можете настроить аннотации nullness:

  1. Настройки | Инспекции | Постоянные условия и исключения | Настройка аннотаций
  2. Настройки | Инспекции | @NotNull/@Nullable проблемы | Настройка аннотаций

Когда я настраивал аннотации, добавлял их, используя 1.), не зная, что 2.). Проблема была вызвана тем, что в 2.) аннотация checkers.nullness.quals.NonNull была выбрана как в разделах Nullable, так и в разделе NonNull, что явно неверно. В 1.) все было нормально.

Чтобы решить эту проблему, я удалил checkers.nullness.quals.NonNull из раздела Nullable в 2.) и добавил и выбрал checkers.nullness.quals.Nullable.

person jaw    schedule 28.10.2014