Здравствуйте, Blazkowicz, Вы писали:
B>Что слышно про аналогичные решения? http://aprove.informatik.rwth-aachen.de/eval/JBC-Nonterm/
Есть множество инструментов для Java, которые находят ошибки в программах, связанные с использованием null. Конечная цель Kanva-micro, описанного в статье, и автоматического вывода аннотаций в IntelliJ IDEA — та же самая: находить ошибки в коде. Только в этом случае нахождение ошибок разделено на две стадии (застадировано). Вначале выводятся свойства того, как библиотеки, используемые в проекте, работают с null — эти свойства выводятся в форме аннотаций (форма здесь не так важна). А затем эти выведенные свойства используются при проверке кода, который пишет программист (когда он использует методы из библиотек). В IDEA принято, что большинство анализов (code inspections) могут показать ошибку/предупреждение почти моментально (за исключением некоторого количества глобальных анализов по всему проекту) — программист печатает код и сразу же видит ошибки. Отдельное аннотирование библиотек и использование этой информации в редакторе позволяют делать в том числе и inspection того, как программист работает с библиотечными методами на предмет NPE сразу же в редакторе. А dataflow analysis в IDEA очень мощный. Собственно говоря, вывод аннотаций сам по себе не пытается искать никаких ошибок в анализируемом коде, он собирает информацию, которая окажется полезной потом — при анализе (другого!) кода в редакторе.
Все известные мне другие инструменты (находящие NPE) не ориентированы на такой сценарий интеграции с IDE — их основной сценарий: человек нажимает кнопку, ждет (как правило, достаточно долго) и получает какие-то ошибки. Наш же подход — отдельное аннотирование библиотек + отдельный анализ исходников, в которых используются библиотеки — позволяет добиться интерактивности.
А так, да — существуют инструменты, находящие NPE — FindBugs, PMD, Julia Analyzer и т.д. Что-то они делают лучше, что-то хуже) Из тех инструментов, в которых я копался, разбираясь с их внутренним устройством, только FindBugs в некоторой степени выводит в явном виде nulllability параметров для библиотек, но делает он это очень поверхностно.