
O suporte propenso a erros é uma extensão opinada por piquenique do propenso a erros do Google. O objetivo é melhorar a qualidade do código, concentrando -se na manutenção, consistência e evitar armadilhas comuns.
Proane de erro é uma ferramenta de análise estática para Java que captura erros de programação comuns em tempo de compilação.
Para saber mais sobre os erros propensos a erros (suporte), como você pode começar a usar os erros propensos à prática e como o usamos no Picnic, assista à conversa da conferência automatizando bugs fora com os erros propensos à prática . Considere também conferir a postagem do blog Picnic Loves Err Errons: Produzindo código Java de alta qualidade e consistente .
Introdução • Desenvolvendo suporte propenso a erros • Como funciona • Contribuindo
Esta biblioteca é construída sobre o outro propenso a erros. Para usá -lo, leia o guia de instalação para Maven ou Gradle abaixo. A biblioteca exige que sua compilação seja executada usando o JDK 17 ou superior, mas suporta compilações que visam versões mais antigas do Java.
Primeiro, siga o guia de instalação do Erro Prone.
Em seguida, edite seu arquivo pom.xml para adicionar um ou mais módulos de suporte de propenso a erros aos annotationProcessorPaths do maven-compiler-plugin :
< build >
< pluginManagement >
< plugins >
< plugin >
< groupId >org.apache.maven.plugins</ groupId >
< artifactId >maven-compiler-plugin</ artifactId >
<!-- Prefer using the latest release. -->
< version >3.12.0</ version >
< configuration >
< annotationProcessorPaths >
<!-- Error Prone itself. -->
< path >
< groupId >com.google.errorprone</ groupId >
< artifactId >error_prone_core</ artifactId >
< version >${error-prone.version}</ version >
</ path >
<!-- Error Prone Support's additional bug checkers. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >error-prone-contrib</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
<!-- Error Prone Support's Refaster rules. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >refaster-runner</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
</ annotationProcessorPaths >
< compilerArgs >
< arg >
-Xplugin:ErrorProne
<!-- Add other Error Prone flags here. See
https://errorprone.info/docs/flags. -->
</ arg >
< arg >-XDcompilePolicy=simple</ arg >
</ compilerArgs >
<!-- Enable this if you'd like to fail your build upon warnings. -->
<!-- <failOnWarning>true</failOnWarning> -->
</ configuration >
</ plugin >
</ plugins >
</ pluginManagement >
</ build > Primeiro, siga o guia de instalação do gradle-errorprone-plugin .
Em seguida, edite seu arquivo build.gradle para adicionar um ou mais módulos de suporte propensos a erros:
dependencies {
// Error Prone itself.
errorprone( " com.google.errorprone:error_prone_core: ${ errorProneVersion } " )
// Error Prone Support's additional bug checkers.
errorprone( " tech.picnic.error-prone-support:error-prone-contrib: ${ errorProneSupportVersion } " )
// Error Prone Support's Refaster rules.
errorprone( " tech.picnic.error-prone-support:refaster-runner: ${ errorProneSupportVersion } " )
}
tasks . withType( JavaCompile ) . configureEach {
options . errorprone . disableWarningsInGeneratedCode = true
// Add other Error Prone flags here. See:
// - https://github.com/tbroyer/gradle-errorprone-plugin#configuration
// - https://errorprone.info/docs/flags
}Considere o seguinte código de exemplo:
import com . google . common . collect . ImmutableSet ;
import java . math . BigDecimal ;
public class Example {
static BigDecimal getNumber () {
return BigDecimal . valueOf ( 0 );
}
public ImmutableSet < Integer > getSet () {
ImmutableSet < Integer > set = ImmutableSet . of ( 1 );
return ImmutableSet . copyOf ( set );
}
}Se a instalação foi bem -sucedida, a criação do código acima com o Maven deve produzir dois avisos do compilador:
$ mvn clean install
...
[INFO] Example.java:[9,34] [Refaster Rule] BigDecimalRules.BigDecimalZero: Refactoring opportunity
(see https://error-prone.picnic.tech/refasterrules/BigDecimalRules#BigDecimalZero)
Did you mean ' return BigDecimal.ZERO; ' ?
...
[WARNING] Example.java:[13,35] [IdentityConversion] This method invocation appears redundant ; remove it or suppress this warning and add a comment explaining its purpose
(see https://error-prone.picnic.tech/bugpatterns/IdentityConversion)
Did you mean ' return set; ' or ' @SuppressWarnings("IdentityConversion") public ImmutableSet<Integer> getSet() { ' ?
...Duas coisas estão chegando aqui:
BugChecker que sinaliza conversões de identidade desnecessárias.BigDecimal.valueOf(0) e new BigDecimal(0) para BigDecimal.ZERO .Não deixe de conferir todas as verificações de bugs e regras de refterar.
Este é um projeto MAVEN; portanto, a execução mvn clean install executa uma compilação limpa completa e instala a biblioteca no repositório Maven local.
Depois de fazer alterações, a compilação pode falhar devido a um aviso ou erro emitido pela análise de código estático. Os sinalizadores e comandos listados abaixo permitem suprimir ou (em um grande subconjunto de casos) corrigir automaticamente esses casos. Verifique cuidadosamente as opções disponíveis, pois isso pode economizar quantidades significativas de tempo de desenvolvimento!
Parâmetros de construção do Maven relevante:
-Dverification.warn Faz os avisos e erros emitidos por vários plug-ins e o compilador Java não fatal, sempre que possível.-Dverification.skip desativa vários plug-ins não essenciais e compila o código com verificações mínimas (ou seja, sem linering, verificações propensas a erros etc.).-Dversion.error-prone=some-version executa a compilação usando a versão especificada de propenso a erros. Isso é útil, por exemplo, ao testar um instantâneo de erro construído localmente.-Perror-prone-fork executa a compilação usando o Fork de Propenso a Erros do Picnic, hospedado no Jitpack. Esse garfo geralmente contém algumas alterações no topo da mais recente versão de propenso a erros.-Pself-check executa os cheques definidos por este projeto contra si mesmo. Dependendo de um lançamento do Google/Prone Errone#3301, este sinalizador deve ser usado atualmente em combinação com -Perror-prone-fork .Outros comandos altamente relevantes:
mvn fmt:format formato formato o código usando google-java-format ../run-full-build.sh constrói o projeto duas vezes, onde o segundo passe valida a compatibilidade com o Fork de Erros do Picnic e a conformidade do Código com quaisquer regras definidas neste projeto. (Considere executar isso antes de abrir uma solicitação de tração, pois as verificações de relações públicas também executam essa validação.)./apply-error-prone-suggestions.sh Prone-suggestions.sh aplica sugestões de código de suporte propensas a erros e propenso a erros a este projeto. Antes de executar este comando, certifique -se de ter instalado o projeto ( mvn clean install ) e verifique se o diretório de trabalho atual não contém alterações não compensadas ou não comprometidas../run-branch-mutation-tests.sh mututh-tests.sh usa PITEST para executar testes de mutação no código que é modificado em relação à ramificação padrão a montante. Os resultados podem ser revisados abrindo os respectivos arquivos target/pit-reports/index.html . Pode-se usar ./run-mutation-tests.sh para executar testes de mutação contra todo o código no diretório de trabalho atual. Para mais informações, verifique o plug -in do pit maven.Ao executar os testes do projeto em Intellij Idea, você pode ver o seguinte erro:
java: exporting a package from system module jdk.compiler is not allowed with --release
Se isso acontecer, vá para Configurações -> Build, Execution, Deplayment -> Compiler -> Java Compiler e desmarque a opção Use a opção ' - -RELEASE' para compilação cruzada (Java 9 e posterior) . Veja IDEA-288052 para obter detalhes.
Este projeto fornece implementações adicionais BugChecker .
Deseja relatar ou corrigir um bug, sugerir ou adicionar um novo recurso ou melhorar a documentação? Isso é incrível! Leia nossas diretrizes de contribuição.
Se você deseja relatar uma vulnerabilidade de segurança, faça -o através de um canal privado; Consulte nossa política de segurança para obter detalhes.