Вот несколько фрагментов кода, которые могут вызывать исключение NullPointerException.Сценарии аннотации NPE и инструменты статического анализа для Java
01:
public void m1(@Nullable String text) {
System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
02:
private boolean _closed = false;
public void m1(@Nullable String text) {
if(_closed)
return;
System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
03:
public void m1(@NotNull String text) {
System.out.print(text.toLowerCase());
}
public @Nullable String getText() {
return "Some text";
}
public void m2() {
m1(getText()); // <-- expect to be reported.
}
Разные люди имеют доступ к различным инструментам статического анализа. Было бы неплохо собрать информацию, какие инструменты могут обнаруживать и сообщать о проблемах, а что - неудачи. Кроме того, если у вас есть собственный сценарий, пожалуйста, опубликуйте их.
Вот мои результаты
FindBugs (1.3.9):
- 01: [S] Параметр должен быть ненулевая, но помечается как обнуляемым
- 02: [F] не сообщается
- 03: [F] не сообщается
IntelliJ IDE 9.0.2 (Community Edition):
- 01: [S], вызов метода text.toLowerCase() может привести к java.lang.NullPointerException
- 02: [S] Способ вызова text.toLowerCase() может производить java.lang.NullPointerException
- 03: [S] Аргумент GetText() может быть пустым
- 01: [S] разыменование возможно, нулевого эталонного текст
- 02: [S] разыменование возможно, нулевого эталонного текст
- 03: [S] несовместимые типы. найдено: @Nullable String, требуется: @NonNull Строка
аннотаций пакеты:
javax.annotation.* // JSR 305
edu.umd.cs.findbugs.annotations.* // FindBugs
org.jetbrains.annotations.* // IntelliJ
checkers.nullness.quals.* // Checker Framework
Поскольку вы просите нескольких людей внести свой вклад, вы можете пометить эту вики сообщества. – bmargulies
укажите, из какого пакета @Nullable и @NotNull, из-за того, что они не являются частью Java 6. –
1. Отмечено как сообщество wiki. 2. У разных инструментов есть свои собственные библиотеки аннотаций.Для IntelliJ они происходили из org.jetbrains.nnotes. *, А для FindBugs это были edu.ums.cs.findbugs.annotations. * Но в обоих случаях библиотека называлась annotations.jar. – alex2k8