
La prise en charge des erreurs sujette à l'erreur est une extension opinée par le pique-nique de l'erreur de Google sujette. Il vise à améliorer la qualité du code, en se concentrant sur la maintenabilité, la cohérence et l'évitement des pièges courants.
Les erreurs sujettes sont un outil d'analyse statique pour Java qui capture des erreurs de programmation courantes au moment de la compilation.
Pour en savoir plus sur les erreurs sujettes (support), comment vous pouvez commencer à utiliser l'erreur sujette à la pratique et comment nous l'utilisons au pique-nique, regardez la conférence parler de bugs automatisant avec des erreurs sujettes dans la pratique . Envisagez également de consulter le blog Picnic Loves Loves Error Implance: Produire du code Java de haute qualité et cohérent .
Démarrer • Développer une prise en charge sujette aux erreurs • Comment cela fonctionne • Contribuer
Cette bibliothèque est construite au-dessus des erreurs sujettes. Pour l'utiliser, lisez le guide d'installation pour Maven ou Gradle ci-dessous. La bibliothèque exige que votre version soit exécutée à l'aide de JDK 17 ou plus, mais prend en charge les versions qui ciblent les anciennes versions de Java.
Tout d'abord, suivez le guide d'installation de l'erreur.
Ensuite, modifiez votre fichier pom.xml pour ajouter un ou plusieurs modules de support sujets aux erreurs aux annotationProcessorPaths du 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 > Tout d'abord, suivez le guide d'installation du gradle-errorprone-plugin .
Ensuite, modifiez votre fichier build.gradle pour ajouter un ou plusieurs modules de support sujets aux erreurs:
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
}Considérez l'exemple de code suivant:
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 l'installation a réussi, la construction du code ci-dessus avec Maven devrait produire deux avertissements de compilateur:
$ 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() { ' ?
...Deux choses se lancent ici:
BugChecker sujette à l'erreur qui signale les conversions d'identité inutiles.BigDecimal.valueOf(0) et new BigDecimal(0) à BigDecimal.ZERO .Assurez-vous de consulter toutes les vérifications des bogues et les règles de répassive.
Il s'agit d'un projet Maven, donc l'exécution mvn clean install effectue une version complète propre et installe la bibliothèque de votre référentiel Maven local.
Une fois que vous avez apporté des modifications, la construction peut échouer en raison d'un avertissement ou d'une erreur émise par l'analyse de code statique. Les drapeaux et commandes répertoriés ci-dessous vous permettent de supprimer ou (dans un grand sous-ensemble de cas) corriger automatiquement ces cas. Assurez-vous de vérifier soigneusement les options disponibles, car cela peut vous faire économiser des quantités importantes de développement!
Paramètres de construction maven pertinents:
-Dverification.warn fait les avertissements et les erreurs émis par divers plugins et le compilateur Java non mortel, si possible.-Dverification.skip désactive divers plugins non essentiels et compile le code avec un minimum de vérifications (c'est-à-dire sans libellé, vérification des erreurs, etc.).-Dversion.error-prone=some-version Exécute la version en utilisant la version spécifiée d'erreur sujette. Ceci est utile, par exemple lors du test d'un instantané à l'erreur localement construit localement.-Perror-prone-fork exécute la construction à l'aide de la fourche sujette à l'erreur de Picnic, hébergée sur Jitpack. Cette fourche contient généralement quelques modifications en plus de la dernière version d'erreur sujette à l'erreur.-Pself-check exécute les chèques définis par ce projet contre lui-même. En attendant une version de Google / Ordor-sujet # 3301, ce drapeau doit actuellement être utilisé en combinaison avec -Perror-prone-fork .Autres commandes très pertinentes:
mvn fmt:format Formats Le code à l'aide google-java-format ../run-full-build.sh construit le projet deux fois, où le deuxième pass valide la compatibilité avec la fourche et la conformité à l'erreur de Picnic et la conformité du code avec toutes les règles définies dans ce projet. (Envisagez de l'exécuter avant d'ouvrir une demande de traction, car les chèques PR effectuent également cette validation.)./apply-error-prone-suggestions.sh applique les suggestions de code de support sujet aux erreurs et aux erreurs à ce projet. Avant d'exécuter cette commande, assurez-vous d'avoir installé le projet ( mvn clean install ) et assurez-vous que le répertoire de travail actuel ne contient pas de modifications non statées ou non commises../run-branch-mutation-tests.sh utilise les tests de mutation les plus pitèques contre le code modifié par rapport à la branche par défaut en amont. Les résultats peuvent être examinés en ouvrant les fichiers target/pit-reports/index.html respectifs. On peut utiliser ./run-mutation-tests.sh pour exécuter des tests de mutation contre tout le code dans le répertoire de travail actuel. Pour plus d'informations, consultez le plugin Pit Maven.Lorsque vous exécutez les tests du projet dans Intellij Idea, vous pouvez voir l'erreur suivante:
java: exporting a package from system module jdk.compiler is not allowed with --release
Si cela se produit, accédez à Paramètres -> build, exécution, déploiement -> Compiler -> Compiler Java et désélectionner l'option Utilisation de l'option '--release' pour la compilation croisée (Java 9 et plus tard) . Voir l'idée-288052 pour plus de détails.
Ce projet fournit des implémentations supplémentaires BugChecker .
Vous souhaitez signaler ou corriger un bogue, suggérer ou ajouter une nouvelle fonctionnalité, ou améliorer la documentation? C'est génial! Veuillez lire nos directives de contribution.
Si vous souhaitez signaler une vulnérabilité de sécurité, veuillez le faire via un canal privé; Veuillez consulter notre politique de sécurité pour plus de détails.