FindBugs и CheckForNull для классов и интерфейсов
Есть ли способ позволить FindBugs проверять и предупреждать меня, если аннотация CheckForNull присутствует для реализации метода в классе, но не для объявления метода в интерфейсе?
import javax.annotation.CheckForNull;
interface Foo {
public String getBar();
}
class FooImpl implements Foo {
@CheckForNull
@Override
public String getBar() {
return null;
}
}
public class FindBugsDemo {
public static void main(String[] args) {
Foo foo = new FooImpl();
System.out.println(foo.getBar().length());
}
}
Я только что обнаружил ошибку в своем приложении из-за отсутствующей нулевой проверки, которая не была обнаружена FindBugs, потому что CheckForNull присутствовал только в FooImpl, но не в Foo, и я не хочу определять все другие местоположения этой проблемы вручную.
1 ответ
Да, вы можете написать свои собственные детекторы и упаковать их в свой собственный файл плагина jar. См. Fb-contrib.sf.net в качестве примера вспомогательного плагина findbugs.
Единственная проблема заключается в том, что FindBugs использует bcel 5.2, который пока не поддерживает аннотации. Вы по-прежнему получаете атрибуты, переданные вам, которые представляют аннотации, но это больше ручное кодирование, чем будет в 5.3 (или любой другой версии bcel).