
Поддержка, подверженная ошибкам,-это пикник-оптимизированный расширение ошибки Google. Он направлен на улучшение качества кода, сосредоточение внимания на обслуживаемости, последовательности и избегании общих ловушек.
Ошибка, подвергающаяся ошибкам, является статическим инструментом анализа для Java, который ловит общие ошибки программирования во время компиляции.
Чтобы узнать больше об ошибках, подвергающихся ошибкам (поддержка), о том, как вы можете начать использовать склонность к ошибкам на практике, и о том, как мы используем ее на пикнике, посмотрите, как конференция разговоров об автоматизации, выступающих с ошибками, склонными на практике . Также рассмотрите возможность проверить пост в блоге . Ошибка Picnic Loves Loves, склонная к созданию высококачественного и последовательного кода Java .
Начало работы • Разработка поддержки склонности к ошибкам • Как это работает • Внесение
Эта библиотека построена поверх ошибки. Чтобы использовать его, прочитайте руководство по установке для Maven или Gradle ниже. Библиотека требует, чтобы ваша сборка выполнялась с использованием JDK 17 или выше, но поддерживает сборки, которые нацелены на старые версии Java.
Сначала следуйте руководству по установке ошибки.
Далее, отредактируйте свой файл pom.xml , чтобы добавить один или несколько модулей поддержки, подверженных ошибкам, в annotationProcessorPaths 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 > Во-первых, следуйте руководству по установке gradle-errorprone-plugin .
Далее, отредактируйте свой файл build.gradle , чтобы добавить один или несколько модулей поддержки, подверженных ошибкам:
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
}Рассмотрим следующий пример кода:
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 );
}
}Если установка была успешной, то построение вышеуказанного кода с Maven должен дать два предупреждения компилятора:
$ 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() { ' ?
...Здесь начнутся две вещи:
BugChecker , склонной к ошибке, который отмечает ненужные преобразования идентичности.BigDecimal.valueOf(0) и new BigDecimal(0) к BigDecimal.ZERO .Обязательно ознакомьтесь с всеми проверками ошибок и правилами рефекса.
Это проект Maven, поэтому запуск mvn clean install выполняет полную чистую сборку и устанавливает библиотеку в местный репозиторий Maven.
После того, как вы внесли изменения, сборка может потерпеть неудачу из -за предупреждения или ошибки, излучаемой анализом статического кода. Флаги и команды, перечисленные ниже, позволяют вам подавлять или (в большом подмножеством случаев) автоматически исправлять такие случаи. Обязательно внимательно проверяйте доступные варианты, так как это может сэкономить вам значительное время разработки!
Соответствующие параметры сборки Maven:
-Dverification.warn делает предупреждения и ошибки, излучаемые различными плагинами, и Java Compiler не Fatal, где это возможно.-Dverification.skip отключает различные несущественные плагины и компилирует код с минимальными проверками (т.е. без сжимания, проверки с ошибкой и т. Д.).-Dversion.error-prone=some-version Это полезно, например, при тестировании локально построенного снимка ошибки.-Perror-prone-fork запускает сборку, используя вилку с ошибкой пикника, размещенную на Jitpack. Эта вилка, как правило, содержит несколько изменений в дополнение к последнему выпуску склонности к ошибкам.-Pself-check запускает чеки, определенные этим проектом против себя. В ожидании выпуска Google/склонности к ошибкам#3301, этот флаг в настоящее время должен использоваться в сочетании с -Perror-prone-fork .Другие очень важные команды:
mvn fmt:format форматирует код с использованием google-java-format ../run-full-build.sh строит проект дважды, где второй проход проверяет совместимость с вилкой с ошибкой пикника и соответствием кода с любыми правилами, определенными в этом проекте. (Рассмотрим, как запустить это перед открытием запроса на притяжение, так как проверки PR также выполняют эту проверку.)./apply-error-prone-suggestions.sh применяет ошибки, подверженные ошибкам и предложения поддержки склонны к ошибкам к этому проекту. Перед тем, как запустить эту команду, убедитесь, что установили проект ( mvn clean install ) и убедитесь, что текущий рабочий каталог не содержит неустановленных или некоммертных изменений../run-branch-mutation-tests.sh использует Pitest для запуска мутационных тестов против кода, который изменен по сравнению с филиалом по умолчанию вверх по течению. Результаты могут быть рассмотрены, открыв соответствующие файлы target/pit-reports/index.html . Можно использовать ./run-mutation-tests.sh для запуска мутационных тестов против всего кода в текущем рабочем каталоге. Для получения дополнительной информации проверьте плагин Pit Maven.При запуске тестов проекта в Intellij Idea вы можете увидеть следующую ошибку:
java: exporting a package from system module jdk.compiler is not allowed with --release
Если это произойдет, перейдите к параметрам -> Build, выполнение, развертывание -> Компилятор -> Компилятор Java и отмените опцию «Использование» -«Разрешение» для перекрестного компиляции (Java 9 и более позднее) . Смотрите IDEA-288052 для деталей.
Этот проект предоставляет дополнительные реализации BugChecker .
Хотите сообщить или исправить ошибку, предложить или добавить новую функцию или улучшить документацию? Это круто! Пожалуйста, прочитайте наши рекомендации по вкладу.
Если вы хотите сообщить об уязвимости безопасности, пожалуйста, сделайте это через частный канал; Пожалуйста, смотрите нашу политику безопасности для получения подробной информации.