2013-02-23 1 views
1

FindBugs, кажется, показывает только первое появление конкретной ошибки в каждом методе. Это происходит в Eclipse, а также в автономном клиенте FindBugs.
Как настроить FindBugs для отображения всех вхождений?FindBugs показывает только первое появление ошибки

Пример:

import javax.annotation.Nonnull; 

public class Bar 
{ 
    public void meth(@Nonnull final String pArg) { 
     System.out.println(pArg); 
    } 

    public void foo() { 
     String s = null; 
     meth(s);  // <<== bug marker here (NP_NONNULL_PARAM_VIOLATION) 
     meth(null); // no bug marker here 
     meth(s);  // and none here either :-(
    } 
} 

Im я, используя последние FindBugs 2.0.2 плагин Eclipse (с Eclipse, 3.6).

Проблема, похоже, зависит от шаблона ошибки. Например, я вижу более одного удара по методу с DLS_DEAD_LOCAL_STORE, но не с NP_NONNULL_PARAM_VIOLATION. Последнее показано выше.

Спасибо!

+0

Я использую затмение 4.2 и FindBugs 2.0.1 и я вижу больше, чем один, по крайней мере, в некоторых случаях ошибки в методе. Можете ли вы добавить небольшой пример? – TimK

+0

@TimK Конечно - просто добавил пример выше. –

+0

Я вижу то же самое и не могу это объяснить. Даже другой экземпляр с другим методом и строкой не сообщается. Я попробовал пример с двумя ошибками RC_REF_COMPARISON, и он сообщил обоим. – TimK

ответ

2

Кажется, что Findbugs проверяет только те строки кода для этой конкретной ошибки, которые фактически могут быть достигнуты в соответствии с анализом потока управления. При использовании ваших 3-х методов-вызовов первый приводит к NPE, поэтому второй и третий никогда не будут достигнуты.

Там было аналогичные сообщения об ошибках для предыдущих версий: http://sourceforge.net/p/findbugs/bugs/980/

+0

Да, это похоже. Однако FindBugs 1.3.9 используется для сканирования всего метода. Датчик нулевой черты, похоже, потерял эту функцию. –