我想抑制特定字段或局部变量的FindBugs警告。 FindBugs文档指出Target的edu.umd.cs.findbugs.annotations.SuppressWarning注释[1]可以是Type,Field,Method,Parameter,Constructor,Package。 但是只有当我注释警告被抑制的方法时,它才能对我进行注释。
对整个方法进行注释似乎对我来说很广泛。有没有办法抑制特定字段的警告?还有另一个相关问题[2],但没有答案。
[1] http://findbugs.sourceforge.net/manual/annotations.html
[2] Suppress FindBugs warnings in Eclipse
演示代码:
public class SyncOnBoxed
{
static int counter = 0;
// The following SuppressWarnings does NOT prevent the FindBugs warning
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
final static Long expiringLock = new Long(System.currentTimeMillis() + 10);
public static void main(String[] args) {
while (increment(expiringLock)) {
System.out.println(counter);
}
}
// The following SuppressWarnings prevents the FindBugs warning
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
protected static boolean increment(Long expiringLock)
{
synchronized (expiringLock) { // <<< FindBugs warning is here: Synchronization on Long in SyncOnBoxed.increment()
counter++;
}
return expiringLock > System.currentTimeMillis(); // return false when lock is expired
}
}
答案 0 :(得分:19)
@SuppressFBWarnings
仅抑制针对该字段声明报告的findbugs警告,而不是与该字段关联的每个警告。
例如,这会禁止“仅将字段设置为空”警告:
@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;
我认为你能做的最好的事情就是将代码与警告隔离成最小的方法,然后在整个方法上禁止警告。
注意:@SuppressWarnings
标记为deprecated,支持@SuppressFBWarnings
答案 1 :(得分:3)
检查http://findbugs.sourceforge.net/manual/filter.html#d0e2318 有一个可以与Method标签一起使用的Local标签。在这里,您可以指定应为特定局部变量排除哪个错误。 例如:
<FindBugsFilter>
<Match>
<Class name="<fully-qualified-class-name>" />
<Method name="<method-name>" />
<Local name="<local-variable-name-in-above-method>" />
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
</Match>
</FindBugsFilter>