FindBugs и CheckForNull для классов и интерфейсов - PullRequest
1 голос
/ 10 марта 2010

Есть ли способ позволить 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 Ответ

1 голос
/ 29 апреля 2010

Да, вы можете написать свои собственные детекторы и упаковать их в свой собственный файл плагина jar. См. Fb-contrib.sf.net в качестве примера вспомогательного плагина findbugs.

Единственная проблема заключается в том, что FindBugs использует bcel 5.2, который еще не поддерживает аннотации. Вы по-прежнему получаете атрибуты, переданные вам, которые представляют аннотации, но это больше ручное кодирование, чем будет в 5.3 (или любой другой версии bcel).

...