Каков список допустимых имен предупреждений @SuppressWarnings в Java?

Каков список допустимых имен @SuppressWarnings предупреждений в Java?

Бит, который находится между ("") в @SuppressWarnings("").

Ответ 1

Это зависит от вашей IDE или компилятора.

Вот список для Eclipse Galileo:

  • все, чтобы пресечь все предупреждения
  • бокс, чтобы подавить предупреждения относительно операций бокса/распаковки.
  • лить, чтобы подавить предупреждения относительно операций с литой.
  • dep-ann для подавления предупреждений относительно устаревшей аннотации
  • обесценение для подавления предупреждений относительно устаревания
  • прохождение для подавления предупреждений относительно отсутствующих перерывов в коммутаторе заявления
  • наконец для подавления предупреждений относительно блока finally вернуться
  • скрывать, чтобы пресекать предупреждения относительно локалей, которые скрывают переменную
  • неполный-переключатель для подавления предупреждений относительно отсутствующих записей в операторе switch (регистр перечисления)
  • nls, чтобы подавить предупреждения относительно строковых литералов, отличных от nls
  • null для подавления предупреждений относительно нулевого анализа
  • ограничение, чтобы подавить предупреждения относительно использования обескураженных или запрещенные ссылки
  • серийный, чтобы подавить предупреждения относительно отсутствующих serialVersionUID поле для сериализуемого класса
  • static-access, чтобы подавить предупреждения относительно неправильного статического доступ
  • синтетический доступ для подавления предупреждений относительно неоптимизированного доступ из внутренних классов
  • не отмечен, чтобы подавить предупреждения относительно непроверенных операций
  • неквалифицированный доступ к полям для подавления предупреждений относительно поля доступ к неквалифицированным
  • не используется, чтобы пресекать предупреждения относительно неиспользуемого кода

Список для индиго добавляет:

  • javadoc для подавления предупреждений относительно предупреждений javadoc
  • rawtypes, чтобы подавить предупреждения относительно использования необработанных типов
  • static-method, чтобы подавить предупреждения относительно методов, которые могут быть объявлены как статические
  • super для подавления предупреждений относительно переопределения метода без супер-вызовов

Список для Juno добавляет:

  • ресурс, чтобы подавить предупреждения относительно использования ресурсов типа Closeable
  • sync-override для предотвращения предупреждений из-за отсутствия синхронизации при переопределении синхронизированного метода

Kepler и Luna используют тот же список токенов, что и Juno (список).

Другие будут похожи, но меняются.

Ответ 2

Разрешены все значения (нераспознанные игнорируются). Список признанных является специфичным для компилятора.

В Учебники Java unchecked и deprecation перечислены в качестве двух предупреждений, требуемых Спецификацией языка Java, поэтому они должны допустимо со всеми компиляторами:

Каждое предупреждение компилятора относится к категории. Спецификация языка Java содержит две категории: устаревшие и непроверенные.

Конкретные разделы внутри Спецификация языка Java, где они определены, несовместимы между версиями. В спецификации Java SE 8 unchecked и deprecation перечислены как предупреждения компилятора в разделах 9.6.4.5. @SuppressWarnings и 9.6.4.6 @Deprecated, соответственно.

Для компилятора Sun, запуск javac -X дает список всех значений, распознаваемых этой версией. Для 1.5.0_17 список выглядит следующим образом:

  • все
  • устаревания
  • бесконтрольно
  • проваливаемся
  • путь
  • Последовательный
  • наконец,

Ответ 3

Список специфичен для компилятора. Но вот значения, поддерживаемые в Eclipse:

  • allDeprecation обесценивание даже внутри устаревшего кода
  • allJavadoc недействительный или отсутствующий javadoc
  • assertIdentifier появление assert используется как идентификатор
  • бокс преобразование autoboxing
  • charConcat, когда массив char используется в конкатенации строк без прямого преобразования в строку
  • conditionAssign возможное случайное логическое назначение
  • метод constructorName с имя конструктора
  • dep-ann отсутствует @Deprecated аннотация
  • устаревшее использование устаревшего типа или члена вне устаревшего кода
  • обескуражено использование типов, соответствующих запрещенному правилу доступа
  • emptyBlock недокументированный пустой блок
  • enumSwitch, неполный переключатель неполный переключатель перечисления
  • прохождение возможного сквозного случая
  • fieldHiding поле, скрывающее другую переменную
  • finalBound с конечной границей
  • наконец, наконец, блокировка не выполняется нормально
  • запрещено использование типов, соответствующих запрещенному правилу доступа
  • скрытие макроса для fieldHiding, localHiding, typeHiding и maskedCatchBlock
  • косвенная косвенная ссылка на статический член
  • intfAnnotation тип аннотации, используемый в качестве суперинтерфейса
  • intfNonInherited совместимость интерфейса с не унаследованным интерфейсом
  • javadoc недействительный javadoc
  • localHiding локальная переменная, скрывающая другую переменную
  • maskedCatchBlocks скрытый блок catch
  • nls не-nls строковые литералы (отсутствие тегов // $NON-NLS-)
  • noEffectAssign назначение без эффекта
  • null Отсутствует или отсутствует нулевая проверка.
  • nullDereference отсутствует проверка null
  • over-ann отсутствует аннотация @Override
  • paramAssign присвоение параметру
  • pkgDefaultMethod попытка переопределить метод по умолчанию
  • raw использование типа raw (вместо параметризованного типа)
  • точка с запятой ненужная точка с запятой или пустой оператор
  • серийный отсутствует serialVersionUID
  • specialParamHiding конструктор или параметр setter скрывает другое поле
  • макрос static-access для косвенных и staticReceiver
  • staticReceiver, если нестатический приемник используется для получения статического поля или вызова статического метода
  • super переопределение метода без создания супер-вызова
  • подавить включить @SuppressWarnings
  • синтетический доступ, синтетический доступ при синтетическом доступе для внутреннего класса
  • задачи включить поддержку тегов задач в исходном коде
  • typeHiding параметр типа скрывает другой тип
  • непроверенная операция без отметки типа
  • ненужноеElse необязательное предложение else
  • unqualified-field-access, unqualifiedField неквалифицированный ссылка на поле
  • не использовался макрос для unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate и unusedThrown
  • unusedArgument неиспользуемый аргумент метода
  • unusedImport неиспользованный импорт ссылка
  • не использовалсяLabel неиспользованная метка
  • unusedLocal неиспользуемая локальная переменная
  • unusedPrivate неиспользуемая декларация частного участника
  • unusedThrownнеиспользуемое объявленное исключение исключений
  • uselessTypeCheck ненужная операция cast/instanceof
  • varargsCast аргумент varargs нуждается в явном приведении
  • warningToken необработанный токен предупреждения в @SuppressWarnings

Sun JDK (1.6) имеет более короткий список поддерживаемых предупреждений:

  • устаревшее Проверить использование устаревших элементов.
  • unchecked. Дайте более подробную информацию о непроверенных предупреждениях о конверсиях, которые заданы спецификацией Java Language Specification.
  • serial Предупреждать о отсутствующих определениях serialVersionUID для сериализуемых классов.
  • наконец Предупреждать о предложениях, которые обычно не могут выполняться.
  • прохождение. Проверьте блоки блокировки для откатных случаев и предоставьте предупреждение для всех найденных.
  • путь Проверьте несуществующий путь в пути к среде (например, путь к классам).

Последний доступный javac (1.6.0_13) для mac имеет следующие поддерживаемые предупреждения

  • все
  • литье
  • устаревшее
  • divzero
  • пустой
  • не отмечен
  • прохождение
  • путь
  • серийный
  • наконец
  • переопределяет

Ответ 4

Новый фаворит для меня - @SuppressWarnings("WeakerAccess") в IntelliJ, который не дает жаловаться, когда он считает, что у вас должен быть более слабый модификатор доступа, чем вы используете. У нас должен быть публичный доступ к некоторым методам поддержки тестирования, и аннотация @VisibleForTesting не предотвращает предупреждения.

ETA: "Аноним" прокомментировал на странице @MattCampbell следующую невероятно полезную заметку:

Вам не нужно использовать этот список для целей, которые вы описываете. IntelliJ автоматически добавит вам эти SuppressWarnings, если вы об этом попросите. Он мог делать это столько раз, сколько я помню.

Просто перейдите в место, где у вас есть предупреждение и введите Alt-Enter (или выберите его в списке проверок, если вы видите его там). Когда появится меню с предупреждением и предложением исправить его для вас (например, если предупреждение "Метод может быть статическим", тогда "сделать статическим" будет IntellJ предлагает исправить это для вас), вместо выбора "enter", просто используйте кнопку со стрелкой вправо, чтобы получить доступ к подменю, которое будет иметь опции, такие как "Изменить настройки инспекционного профиля" и так далее. Внизу этого списка будут такие параметры, как "Подавить все проверки для класса", "Подавить для класса", "Подавить для метода" и иногда "Подавить для утверждения". Вы, вероятно, хотите, чтобы один из них появился последним в списке. Выбор одного из них добавит аннотацию @SuppressWarnings (или комментарий в некоторых случаях) к вашему коду, подавляя данное предупреждение. Вам не нужно будет угадывать, какую аннотацию добавить, потому что IntelliJ выберет на основе выбранного предупреждения.

Ответ 5

И это, кажется, намного более полный список, где я нашел некоторые предупреждения, специфичные для Android-Studio, которые я не мог найти в другом месте (например, SynchronizeOnNonFinalField)

https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html

О, теперь правила SO противоречат ограничениям SO. С одной стороны, я должен скопировать список, а не только ссылку. Но, с другой стороны, это превысит максимально допустимое количество символов. Поэтому давайте просто надеемся, что ссылка не сломается.

Ответ 6

JSL 1.7

Документация Oracle упоминает:

  • unchecked: Непроверенные предупреждения идентифицируются строкой "unchecked".
  • deprecation: Java-компилятор должен выдать предупреждение об устаревании, когда используется тип, метод, поле или конструктор, чье объявление аннотируется аннотацией @Deprecated (т.е. переопределено, вызывается или ссылается по имени), если: [...] Использование находится внутри объекта, который аннотируется для подавления предупреждения с помощью аннотации @SuppressWarnings ( "устаревание" ); или

Затем он объясняет, что реализации могут добавлять и документировать свои собственные:

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

Ответ 7

Я просто хочу добавить, что есть главный список параметров подавления IntelliJ по адресу: https://gist.github.com/vegaasen/157fbc6dce8545b7f12c

Он выглядит довольно всеобъемлющим. Частичное:

Warning Description - Warning Name

"Magic character" MagicCharacter 
"Magic number" MagicNumber 
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed 
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString 
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext 
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException 
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString 
'String.equals("")' StringEqualsEmptyString 
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder 
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation 
'assert' statement AssertStatement 
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes 
'await()' not in loop AwaitNotInLoop 
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal 
'break' statement BreakStatement 
'break' statement with label BreakStatementWithLabel 
'catch' generic class CatchGenericClass 
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone

Ответ 8

Я заметил, что //noinspection может быть автоматически сгенерирован в IntelliJ

  • убедитесь, что у вас еще нет плана @SuppressWarninigs до утверждения
  • Теперь вы можете автоматически сгенерировать определенный //noinspection, нажав Alt + Enter, когда у вас выбрано предупреждение, а затем используйте клавишу со стрелкой вправо, чтобы увидеть опцию Suppress for...

Закончился здесь, когда я хотел подавить предупреждение "Переключатель имеет слишком мало меток регистра" от IntelliJ. Я не нашел полный список поддержки IntelliJ @SuppressWarning но //noinspection мне.

Ответ 9

Если вы используете SonarLint, попробуйте выше метод или класс всей строки squid: @SuppressWarnings ("squid: S1172")