Вот много фрагментов кода, которые могут бросить NullPointerException.
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):
IntelliJ IDE 9.0.2 (Общественный выпуск):
Платформа средства проверки (1.0.7):
Пакеты аннотаций:
javax.annotation.* // JSR 305
edu.umd.cs.findbugs.annotations.* // FindBugs
org.jetbrains.annotations.* // IntelliJ
checkers.nullness.quals.* // Checker Framework
Обратите внимание, что FindBugs совершенно по-разному воспринимает @Nullable и @CheckForNull - первый в основном говорит "Я понятия не имею, должен ли этот метод допускать null или нет", а второй говорит "Этот метод явно допускает null". У моей команды было гораздо больше полезных результатов FindBugs, когда мы глобально изменили все @Nullable на @CheckForNull в нашем коде, так как последнее - это то, что мы действительно имели в виду.