
易率支持的错误是野餐的野餐范围扩展,可容纳Google的错误。它旨在提高代码质量,集中于维护性,一致性和避免常见陷阱。
易行的是Java的静态分析工具,它在编译时会捕获常见的编程错误。
要了解有关易行的错误(支持)的更多信息,您如何开始在实践中使用错误的错误以及我们如何在野餐时使用它,请观看会议对话在实践中易于使用错误的错误自动化错误。还要考虑查看博客文章野餐爱错误容易出现:产生高质量和一致的Java代码。
入门•开发易于支持的错误•如何工作•贡献
该库是在容易发生的基础上构建的。要使用它,请阅读下面的Maven或Gradle的安装指南。该库要求您的构建使用JDK 17或更高版本执行,但是支持构建的构建针对较旧版本的Java的构建。
首先,遵循Prone Prone的安装指南。
接下来,编辑您的pom.xml文件,以在maven-compiler-plugin的annotationProcessorPaths中添加一个或多个错误的支持模块:
< 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编译器发出警告和错误。-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 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
如果发生这种情况,请转到设置 - >构建,执行,部署 - >编译器 - > Java编译器,并取消选择选项使用“ - 释放”选项以进行交叉编译(Java 9及以后) 。有关详细信息,请参见Idea-288052。
该项目提供了其他BugChecker实现。
是否需要报告或修复错误,建议或添加新功能或改进文档?太棒了!请阅读我们的贡献指南。
如果您想报告安全漏洞,请通过私人渠道进行操作;请参阅我们的安全政策以获取详细信息。