Respostas:
A abordagem inicial do FindBugs envolve arquivos de configuração XML, também conhecidos como filtros . Isso é realmente menos conveniente do que a solução PMD, mas o FindBugs funciona no bytecode, não no código fonte, portanto, os comentários obviamente não são uma opção. Exemplo:
<Match>
<Class name="com.mycompany.Foo" />
<Method name="bar" />
<Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>
No entanto, para resolver esse problema, o FindBugs mais tarde introduziu outra solução baseada em anotações (consulte SuppressFBWarnings
) que você pode usar na classe ou no nível do método (mais conveniente que XML na minha opinião). Exemplo (talvez não seja o melhor, mas, bem, é apenas um exemplo):
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value="HE_EQUALS_USE_HASHCODE",
justification="I know what I'm doing")
Observe que, desde que o FindBugs 3.0.0 SuppressWarnings
foi preterido em favor do @SuppressFBWarnings
por causa do conflito de nome com o Java SuppressWarnings
.
<dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
<dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>
ao POM, se quiserem usar @SuppressFBWarnings
.
Como outros mencionados, você pode usar a @SuppressFBWarnings
anotação. Se você não deseja ou não pode adicionar outra Dependência ao seu código, você pode adicionar a Anotação ao seu Código, o Findbugs não se importa em qual Pacote a Anotação está.
@Retention(RetentionPolicy.CLASS)
public @interface SuppressFBWarnings {
/**
* The set of FindBugs warnings that are to be suppressed in
* annotated element. The value can be a bug category, kind or pattern.
*
*/
String[] value() default {};
/**
* Optional documentation of the reason why the warning is suppressed
*/
String justification() default "";
}
Fonte: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88
Aqui está um exemplo mais completo de um filtro XML (o exemplo acima por si só não funcionará, pois mostra apenas um trecho e faltam as <FindBugsFilter>
tags de início e fim):
<FindBugsFilter>
<Match>
<Class name="com.mycompany.foo" />
<Method name="bar" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
</FindBugsFilter>
Se você estiver usando o plug-in Android Studio FindBugs, navegue até o arquivo de filtro XML usando Arquivo-> Outras configurações-> Configurações padrão-> Outras configurações-> FindBugs-IDEA-> Filtro-> Excluir arquivos de filtro-> Adicionar.
Update Gradle
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
Localize o relatório FindBugs
file: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
Encontre a mensagem específica
Importar a versão correta da anotação
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
Adicione a anotação diretamente acima do código incorreto
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
Veja aqui para mais informações: findbugs Spring Annotation
compile 'net.sourceforge.findbugs:annotations:1.3.2'
sintaxe, que é mais curta.
testCompile 'com.google.code.findbugs:annotations:3.0.0'
nome da nota e da anotação@SuppressFBWarnings
No momento em que escrevemos isso (maio de 2018), o FindBugs parece ter sido substituído pelo SpotBugs . O uso da SuppressFBWarnings
anotação requer que seu código seja compilado com o Java 8 ou posterior e introduz uma dependência no tempo de compilação spotbugs-annotations.jar
.
O uso de um arquivo de filtro para filtrar regras do SpotBugs não apresenta esses problemas. A documentação está aqui .
Embora outras respostas aqui sejam válidas, elas não são uma receita completa para resolver isso.
No espírito de perfeição:
Você precisa ter as anotações findbugs no seu arquivo pom - elas são apenas tempo de compilação, para que você possa usar o provided
escopo:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Isso permite o uso de @SuppressFBWarnings
outra dependência que fornece @SuppressWarnings
. No entanto, o acima exposto é mais claro.
Em seguida, adicione a anotação acima do seu método:
Por exemplo
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE",
justification = "Scanning generated code of try-with-resources")
@Override
public String get() {
try (InputStream resourceStream = owningType.getClassLoader().getResourceAsStream(resourcePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, UTF_8))) { ... }
Isso inclui o nome do bug e também uma razão pela qual você está desativando a verificação.
Vou deixar este aqui: https://stackoverflow.com/a/14509697/1356953
Observe que isso funciona, java.lang.SuppressWarnings
portanto, não é necessário usar uma anotação separada.
@SuppressWarnings em um campo suprime apenas os avisos de erros encontrados para essa declaração de campo, nem todos os avisos associados a esse campo.
Por exemplo, isso suprime o aviso "O campo é definido apenas como nulo":
@SuppressWarnings ("UWF_NULL_FIELD") String s = nulo; Acho que o melhor que você pode fazer é isolar o código com o aviso no menor método possível e suprimir o aviso em todo o método.
java.lang.SuppressWarnings
não pode trabalhar Possui retenção de origem, portanto não é visível para encontrar erros.