Как я уже упоминал в предыдущем посте, в IDEA есть интересный плагин InspectionGadgets, который на текущее время предлагает более 500 дополнительных проверок для этой IDE и является мощным инструментом статического анализа кода.
Инспекции этого инструмента весьма удобны в использовании, т.к. сгруппированы по содержанию и назначению и могут настраиваться индивидуально. Более того, результаты настройки можно сохранить в отдельный файл xml формата и загрузить его в IDE в другом месте. Ну, да разговор немного о другом. InspectionGadgets отслеживает и формирует гораздо больше предупреждений, чем java компилятор. И если требуется подавить какое-то из предупреждений, то аннотация @SuppressWarnings отлично работает. Но как узнать название нужного предупреждения, чтобы указать его в параметрах аннотации?
Здесь List of SuppressWarnings arguments есть интересная статья с перечнем из 573-х инспекций и соответствующих им названий. К сожалению, со времени написания статьи сменилось уже несколько версий IDEA, поэтому весьма вероятны некоторые расхождения.
Также в IntelliJ IDEA имеется свой IDE-специфический синтаксис для подавления предупреждений в виде //noinspection name. В чём различие?
Инспекции этого инструмента весьма удобны в использовании, т.к. сгруппированы по содержанию и назначению и могут настраиваться индивидуально. Более того, результаты настройки можно сохранить в отдельный файл xml формата и загрузить его в IDE в другом месте. Ну, да разговор немного о другом. InspectionGadgets отслеживает и формирует гораздо больше предупреждений, чем java компилятор. И если требуется подавить какое-то из предупреждений, то аннотация @SuppressWarnings отлично работает. Но как узнать название нужного предупреждения, чтобы указать его в параметрах аннотации?
Здесь List of SuppressWarnings arguments есть интересная статья с перечнем из 573-х инспекций и соответствующих им названий. К сожалению, со времени написания статьи сменилось уже несколько версий IDEA, поэтому весьма вероятны некоторые расхождения.
Также в IntelliJ IDEA имеется свой IDE-специфический синтаксис для подавления предупреждений в виде //noinspection name. В чём различие?
- @SuppressWarnings("ThrowableInstanceNeverThrown") - может применяться для переменной, метода, класса целиком;
- //noinspection ThrowableInstanceNeverThrown - только для конкретных строк кода (for just the statement).
package by.father.examples.warnings;Если мы попытаемся скомпилировать этот класс через javac в командной строке с опцией -Xlint:all, то обнаружим, что компилятор ничего не знает про //noinspection. Может оказаться полезным об этом помнить.
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused")
public class NoInspectionsExample {
@Deprecated
public void someDeprecatedMethodWithUncheckedOperation () {
List list = new ArrayList();
//noinspection unchecked
list.add("element");
list.get(0).toString();
}
public void tryToUseDeprecatedMethod () {
//noinspection deprecation
someDeprecatedMethodWithUncheckedOperation();
}
@SuppressWarnings("MisspelledToString")
public String tostring () {
//noinspection StringConcatenation
return "Concatenate this part " + " with this one.";
}
}
E:\warni\dev\examples\src\main\java\by\father\examples\warnings>javac -Xlint:all NoInspectionsExample.java
NoInspectionsExample.java:16: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.List
list.add("element");
^
1 warning
Комментариев нет:
Отправить комментарий