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 SuppressWarningsfoi preterido em favor do @SuppressFBWarningspor 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 @SuppressFBWarningsanotaçã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 SuppressFBWarningsanotaçã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 providedescopo:
<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 @SuppressFBWarningsoutra 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.SuppressWarningsportanto, 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.SuppressWarningsnão pode trabalhar Possui retenção de origem, portanto não é visível para encontrar erros.