
Fehleranfällige Unterstützung ist eine picnik-opinionierte Erweiterung von Googles Fehler, die anfällig sind. Ziel ist es, die Codequalität zu verbessern, sich auf Wartbarkeit, Konsistenz und Vermeidung häufiger Fallstricke zu konzentrieren.
Fehleranfänger ist ein statisches Analyse-Tool für Java, das bei der Kompilierungszeit häufige Programmierfehler auffängt.
Um mehr über Fehleranfänger (Support) zu erfahren, wie Sie in der Praxis anfängeln können und wie wir es bei Picnic verwenden, sehen Sie sich die Konferenzgesprächs -Automatik mit Fehler mit Fehler in der Praxis an. Erwägen Sie auch, den Blog-Post -Picknick zu überprüfen.
Erste Schritte • Entwicklungsfehleranfälliger Unterstützung • Wie es funktioniert
Diese Bibliothek ist auf fehleranfälliger Fehler aufgebaut. Um es zu verwenden, lesen Sie den Installationshandbuch für Maven oder Gradle unten. Die Bibliothek verlangt, dass Ihr Build mit JDK 17 oder höher ausgeführt wird, unterstützt jedoch Build, die ältere Versionen von Java abzielen.
Folgen Sie zunächst den Installationshandbuch der Fehleranfänger.
Bearbeiten Sie als Nächstes Ihre pom.xml Datei, um den annotationProcessorPaths des maven-compiler-plugin einen oder mehrere Fehlermodule für Fehleranfänger hinzuzufügen:
< 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 > Folgen Sie zunächst dem Installationshandbuch des gradle-errorprone-plugin .
Bearbeiten Sie als Nächstes Ihre build.gradle -Datei, um einen oder mehrere Fehleranfänger -Support -Module hinzuzufügen:
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
}Betrachten Sie den folgenden Beispielcode:
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 );
}
}Wenn die Installation erfolgreich war, sollte der oben genannte Code mit Maven zwei Compiler -Warnungen erstellen:
$ 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() { ' ?
...Zwei Dinge treten hier ein:
BugChecker , der unnötige Identitätskonvertierungen kennzeichnet.BigDecimal.valueOf(0) und new BigDecimal(0) nach BigDecimal.ZERO umschreiben kann.Schauen Sie sich alle Fehlerprüfungen und Refaster -Regeln an.
Dies ist ein Maven -Projekt. Daher führt das Ausführen mvn clean install einen vollständigen Clean Build durch und installiert die Bibliothek in Ihrem örtlichen Maven -Repository.
Sobald Sie Änderungen vorgenommen haben, kann der Build aufgrund einer Warnung oder einem Fehler, das durch statische Codeanalyse ausgestrahlt wird, fehlschlägt. Mit den unten aufgeführten Flaggen und Befehlen können Sie solche Fälle automatisch unterdrücken oder (in einer großen Teilmenge von Fällen) automatisch beheben. Überprüfen Sie die verfügbaren Optionen sorgfältig, da dies Ihnen erhebliche Entwicklungszeiten sparen kann!
Relevante Maven -Build -Parameter:
-Dverification.warn macht die Warnungen und Fehler, die von verschiedenen Plugins und dem Java-Compiler nach Möglichkeit nicht tödlich sind.-Dverification.skip deaktiviert verschiedene nicht wesentliche Plugins und kompiliert den Code mit minimalen Überprüfungen (dh ohne Linie, fehleranfällige Überprüfungen usw.).-Dversion.error-prone=some-version führen den Build mit der angegebenen Version des Fehlers aus. Dies ist nützlich, z. B. beim Testen eines lokal erstellten Fehlers anfälligen Snapshot.-Perror-prone-fork ist das Build mit Picnic-Fehleranfänger, die auf JITPACK gehostet werden. Diese Gabel enthält im Allgemeinen einige Änderungen zusätzlich zu der neuesten Fehlerveröffentlichung.-Pself-check führt die von diesem Projekt definierten Schecks gegen sich selbst durch. In Anbetracht einer Veröffentlichung von Google/Fehleranfälliger Nr. 3301 muss dieses Flag derzeit in Kombination mit -Perror-prone-fork verwendet werden.Andere hochrelevante Befehle:
mvn fmt:format den Code mit google-java-format ../run-full-build.sh das Projekt zweimal erstellt, wobei der zweite Pass die Kompatibilität mit der Fehlerquelle von Picnic und der Einhaltung des Codes mit den in diesem Projekt definierten Regeln bestätigt. (Erwägen Sie, dies auszuführen, bevor eine Pull -Anfrage geöffnet wird, da die PR -Überprüfungen diese Validierung ebenfalls durchführen.)./apply-error-prone-suggestions.sh Stellen Sie vor dem Ausführen dieses Befehls sicher, dass das Projekt ( mvn clean install ) installiert wurde, und stellen Sie sicher, dass das aktuelle Arbeitsverzeichnis keine nicht gestalteten oder ungewöhnlichen Änderungen enthält../run-branch-mutation-tests.sh verwendet Pitest, um Mutationstests gegen Code auszuführen, der relativ zum vorgelagerten Standardzweig geändert wird. Die Ergebnisse können durch Öffnen der jeweiligen target/pit-reports/index.html Dateien überprüft werden. Man kann verwenden ./run-mutation-tests.sh Weitere Informationen finden Sie im Pit Maven -Plugin.Wenn Sie die Tests des Projekts in der Intellij -Idee durchführen, sehen Sie möglicherweise den folgenden Fehler:
java: exporting a package from system module jdk.compiler is not allowed with --release
In diesem Fall wechseln Sie zu Einstellungen -> Erstellen, Ausführung, Bereitstellung -> Compiler -> Java -Compiler und deaktivieren Sie die Option "Option" -Release "der Option" -Release "für die Cross -Compilation (Java 9 und später) . Weitere Informationen finden Sie in der Idee 288052.
Dieses Projekt bietet zusätzliche BugChecker -Implementierungen.
Möchten Sie einen Fehler melden oder beheben, eine neue Funktion vorschlagen oder hinzufügen oder die Dokumentation verbessern? Das ist großartig! Bitte lesen Sie unsere Beitragsrichtlinien.
Wenn Sie eine Sicherheitsanfälligkeit melden möchten, tun Sie dies bitte über einen privaten Kanal. Weitere Informationen finden Sie in unseren Sicherheitsrichtlinien.