Каков список допустимых имен предупреждений @SuppressWarnings в Java? - PullRequest
244 голосов
/ 30 июля 2009

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

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

Ответы [ 9 ]

235 голосов
/ 30 июля 2009

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

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

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

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

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

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

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

Кеплер и Луна используют тот же список токенов, что и Юнона ( список ).

Другие будут похожи, но различаются.

47 голосов
/ 30 июля 2009

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

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

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

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

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

  • все
  • Устаревшая
  • снят
  • проваливается
  • путь
  • серийный
  • наконец
41 голосов
/ 30 июля 2009

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

  • allDeprecation устаревание даже внутри устаревшего кода
  • allJavadoc неверный или отсутствующий Javadoc
  • assertIdentifier вхождение assert используется в качестве идентификатора
  • бокс конвертация автобокса
  • charConcat когда массив символов используется в конкатенации строк без явного преобразования в строку
  • conditionAssign возможное случайное логическое присвоение
  • constructorName метод с имя конструктора
  • dep-ann отсутствует @ Не рекомендуется аннотация
  • устаревание использование устаревшего типа или члена вне устаревшего кода
  • не рекомендуется использование типов, соответствующих правилу нежелательного доступа
  • emptyBlock недокументированный пустой блок
  • enumSwitch , неполный-переключатель неполный переключатель enum
  • падение возможный случай падения
  • fieldHiding поле скрывает другую переменную
  • finalBound параметр типа с окончательной границей
  • finally наконец, блок не завершается нормально
  • запрещено использование типов, соответствующих правилу запрещенного доступа
  • скрытие макрос для fieldHiding, localHiding, typeHiding и maskedCatchBlock
  • irectStatic косвенная ссылка на статический элемент
  • intfAnnotation тип аннотации, используемый в качестве суперинтерфейса
  • intfNonInherited Совместимость с не наследуемым интерфейсом метода
  • javadoc недействительный javadoc
  • localHiding локальная переменная скрывает другую переменную
  • maskedCatchBlocks скрытый блок захвата
  • nls не-nls строковые литералы (без тегов // $ NON-NLS-)
  • noEffectAssign назначение без эффекта
  • ноль потенциальная пропущенная или избыточная проверка нуля
  • nullDereference проверка отсутствия нуля
  • over-ann отсутствует @Override аннотация
  • paramAssign присвоение параметру
  • pkgDefaultMethod попытка переопределить метод пакета по умолчанию
  • raw использование необработанного типа (вместо параметризованного типа)
  • точка с запятой ненужная точка с запятой или пустое выражение
  • serial отсутствует serialVersionUID
  • specialParamHiding параметр конструктора или установщика, скрывающий другое поле
  • статический доступ * макрос 1150 * для косвенного статического и статического приемника
  • staticReceiver если нестатический приемник используется для получения статического поля или вызова статического метода
  • super переопределение метода без супер-вызова
  • подавить включить @SuppressWarnings
  • синтетический доступ, синтетический доступ при выполнении синтетического доступа для внутреннего класса
  • tasks включить поддержку тегов задач в исходном коде
  • typeHiding параметр типа, скрывающий другой тип
  • не проверено операция без проверки типа
  • ненужныйElse ненужный пункт else
  • неквалифицированный доступ к полям, неквалифицированное поле неквалифицированное ссылка на поле
  • неиспользуемый макрос для неиспользованного аргумента, неиспользуемого импорта, неиспользуемого ярлыка, неиспользованного локального, неиспользованного частного и неиспользованного брошенного
  • unusedArgument аргумент неиспользованного метода
  • unusedImport неиспользованная ссылка на импорт
  • unusedLabel неиспользованная этикетка
  • unusedLocal неиспользуемая локальная переменная
  • unusedPrivate декларация неиспользованного частного члена
  • unusedThrown неиспользованное объявленное исключение
  • uselessTypeCheck ненужное приведение / операция instance
  • varargsCast Аргумент varargs требует явного приведения
  • warningToken необработанный токен предупреждения в @SuppressWarnings

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

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

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

  • все
  • литой
  • амортизация
  • divzero
  • пусто
  • не проверено
  • прорыв
  • путь
  • серийный
  • наконец
  • переопределяет
5 голосов
/ 23 марта 2018

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

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

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

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

1 голос
/ 20 декабря 2017

Я просто хочу добавить, что есть основной список параметров подавления 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
1 голос

JSL 1.7

В документации Oracle упоминается:

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

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

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

1 голос
/ 11 октября 2014

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

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

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

0 голосов
/ 17 апреля 2019

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

0 голосов
/ 17 января 2019

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

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

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

...