
El soporte propenso a errores es una extensión opinionada por picnic de los errores propensos de Google. Su objetivo es mejorar la calidad del código, centrándose en la mantenibilidad, la consistencia y la evitación de dificultades comunes.
Propenso de errores es una herramienta de análisis estático para Java que atrapa errores de programación comunes en el tiempo de compilación.
Para obtener más información sobre los errores propensos (soporte), cómo puede comenzar a usar el error de error en la práctica y cómo lo usamos en Picnic, vea la conversación de la conferencia automatizando los errores con errores propensos a la práctica . También considere revisar la publicación del blog que Picnic ama los errores propensos: producir código Java de alta calidad y consistente .
Comenzar • Desarrollo de soporte propenso a errores • Cómo funciona • Contribuir
Esta biblioteca está construida en la parte superior de los errores. Para usarlo, lea la guía de instalación para Maven o Gradle a continuación. La biblioteca requiere que su construcción se ejecute usando JDK 17 o superior, pero admite compilaciones que se dirigen a versiones anteriores de Java.
Primero, siga la guía de instalación de errores propensos.
A continuación, edite su archivo pom.xml para agregar uno o más módulos de soporte propensos de error al annotationProcessorPaths del 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 > Primero, siga la guía de instalación del gradle-errorprone-plugin .
A continuación, edite su archivo build.gradle para agregar uno o más módulos de soporte propensos de error:
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 el siguiente código de ejemplo:
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 );
}
}Si la instalación fue exitosa, entonces construir el código anterior con Maven debería producir dos advertencias del 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() { ' ?
...Dos cosas están pateando aquí:
BugChecker que marca conversiones innecesarias de identidad.BigDecimal.valueOf(0) y new BigDecimal(0) a BigDecimal.ZERO .Asegúrese de consultar todas las verificaciones de errores y las reglas de renovador.
Este es un proyecto Maven, por lo que ejecutar mvn clean install realiza una compilación completa e instala la biblioteca en su repositorio maven local.
Una vez que haya realizado cambios, la compilación puede fallar debido a una advertencia o error emitido por el análisis de código estático. Los indicadores y comandos enumerados a continuación le permiten suprimir o (en un gran subconjunto de casos) arreglar automáticamente dichos casos. ¡Asegúrese de verificar cuidadosamente las opciones disponibles, ya que esto puede ahorrarle cantidades significativas de tiempo de desarrollo!
Parámetros de construcción de Maven relevantes:
-Dverification.warn realiza las advertencias y errores emitidos por varios complementos y el compilador Java no fatal, cuando sea posible.-Dverification.skip deshabilita varios complementos no esenciales y compila el código con verificaciones mínimas (es decir, sin pelucas, verificaciones propensas a errores, etc.).-Dversion.error-prone=some-version ejecuta la compilación utilizando la versión especificada de errores propensos. Esto es útil, por ejemplo, al probar una instantánea propensa a errores construidos localmente.-Perror-prone-fork ejecuta la construcción con la bifurcación propensa a errores de Picnic, alojado en jitpack. Esta bifurcación generalmente contiene algunos cambios además de la última versión propensa a errores.-Pself-check ejecutan los cheques definidos por este proyecto contra sí mismo. En espera de un lanzamiento de Google/propenso a errores#3301, este indicador debe usarse actualmente en combinación con -Perror-prone-fork .Otros comandos muy relevantes:
mvn fmt:format formatea el código que usa google-java-format ../run-full-build.sh construye el proyecto dos veces, donde el segundo pase valida la compatibilidad con la bifurcación propensa a errores de Picnic y el cumplimiento del código con cualquier regla definida dentro de este proyecto. (Considere ejecutar esto antes de abrir una solicitud de extracción, ya que las verificaciones de PR también realizan esta validación)../apply-error-prone-suggestions.sh aplica sugerencias de código de soporte propensas a errores y de error a este proyecto. Antes de ejecutar este comando, asegúrese de haber instalado el proyecto ( mvn clean install ) y asegúrese de que el directorio de trabajo actual no contenga cambios no estados o no comprometidos../run-branch-mutation-tests.sh usa Pitest para ejecutar pruebas de mutación contra el código que se modifica en relación con la rama predeterminada aguas arriba. Los resultados se pueden revisar abriendo los archivos de target/pit-reports/index.html respectivos. Uno puede usar ./run-mutation-tests.sh para ejecutar pruebas de mutación contra todos los códigos en el directorio de trabajo actual. Para obtener más información, consulte el complemento PIT Maven.Al ejecutar las pruebas del proyecto en IntelliJ Idea, puede ver el siguiente error:
java: exporting a package from system module jdk.compiler is not allowed with --release
Si esto sucede, vaya a Configuración -> Build, Ejecución, Implementación -> Compilador -> Java Compilador y anule la selección de la opción Use la opción ' -Relelar' para la compilación cruzada (Java 9 y más tarde) . Ver Idea-288052 para más detalles.
Este proyecto proporciona implementaciones adicionales BugChecker .
¿Quiere informar o solucionar un error, sugerir o agregar una nueva característica o mejorar la documentación? ¡Eso es increíble! Lea nuestras pautas de contribución.
Si desea informar una vulnerabilidad de seguridad, hágalo a través de un canal privado; Consulte nuestra política de seguridad para obtener más detalles.