Добавление эксклюзивного фильтра для <статического инициализатора> в findbugs - PullRequest
2 голосов
/ 11 мая 2010

Я хочу, чтобы в отчете findbugs не отображалась следующая ошибка:

DM_NUMBER_CTOR: метод вызывает неэффективный конструктор Number; используйте вместо этого статическое значение

Проблема в том, что это происходит в файлах кода, сгенерированных на groovy, поэтому я не могу контролировать исходный код - поэтому я хочу исключить его и добавить в мой фильтр исключения.

Я не хочу явно добавлять класс (поскольку я создаю API, который будут использовать многие инструменты, я хочу, чтобы мой фильтр был универсальным). Я не хотел бы полностью удалять эту ошибку из отчета по типу, я действительно хотел бы только исключить эту ошибку, если она возникла в методах «статического инициализатора». Любая идея? Я попробовал фильтр ниже, но не повезло, может, у кого-то есть идея получше?

<Match>
    <Method name="~.*static initializer.*" />
    <Bug pattern="DM_NUMBER_CTOR" />
</Match>

Вот "стек трассировки" FindBugs в этом случае:

В классе net.milanaleksic.cuc.tools.sound.SoundPlayerTool В методе net.milanaleksic.cuc.tools.sound.SoundPlayerTool. () Называется метод new Long (long) Вместо этого следует вызвать Long.valueOf (long) В SoundPlayerTool.groovy

1 Ответ

4 голосов
/ 12 мая 2010

Я бы предположил , что статический код инициализатора будет сообщаться как происходящий в методе, называемом <clinit>. Не могли бы вы попробовать установить фильтр <Method name='&lt;clinit&gt;'/>? (который в значительной степени <clinit>, но XML-экранированный). Абсолютно непроверенный, только некоторые случайные мысли.

Моя подсказка была частью внутренних тестов http://findbugs\.googlecode\.com&sa=N&cd=2&ct=rc&l=125">some FindBugs:

 String methodName = m.getMethodName();
 ...
 if (...  methodName.equals("<clinit>")) ) ...

Я не уверен, но я думаю, что то же имя метода (<clinit>) упоминается, если ошибки действительно случаются ...

...