问题标签 [errorprone]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 谷歌容易出错,如何限制对其他包或模块的访问
我们的模块,一个名为Z的 maven 模块依赖于A。
A依赖于B依赖于C , D
有没有办法在我们的模块Z中限制对A中直接可用的代码/包的访问,以便只有在Z 访问B、C或D时构建才会失败?
模块/jar B应该仍然能够访问C, D。
这是如何在容易出错的情况下完成的?
缺乏作为容易出错的文档的示例。
关于容易出错的其他问题:
- 如何限制从另一个包访问另一个包?
- 是否可以限制一个类对另一组包、模块的访问?
- 当前使用哪些版本的 Java 容易出错?
- 有没有关于容易出错的书籍、文件?
有价值的例子。
java - 将 CheckReturnValue 应用于整个项目
我在一个大型遗留 Java 8 (Android) 应用程序上工作。我们最近发现了一个由方法的忽略结果引起的错误。具体来说,方法的调用者send()
在发送失败时没有采取正确的行动。它已被修复,但现在我想添加一些静态分析来帮助查找我们的代码中是否存在其他相同性质的现有错误。此外,为了防止将来添加相同性质的新错误。
我们已经使用 Find Bugs、PMD、Checkstyle、Lint 和 SonarQube。所以我认为其中一个可能已经具有我正在寻找的检查,但只需要启用它。但是经过几个小时的搜索和测试,我认为情况并非如此。
作为参考,这是我正在测试的代码:
我想在调用者方面捕捉到这一点,因为一些调用者可能会使用该值,而其他调用者则不会。(上述send()
方法就是这种情况)
我发现了以下现有的静态分析规则,但它们似乎只适用于非常特定的情况,以避免误报并且不适用于我的示例:
- 不应忽略没有副作用的函数的返回值(仅适用于 Java API 中的不可变类)
- 方法忽略异常返回值(仅适用于 File.delete() 等已知方法)
- 方法忽略返回值(我认为仅适用于使用 javax.annotation.CheckReturnValue 注释的方法......)
- 方法忽略返回值,这样可以吗?(仅当返回值与调用方法的类型相同时)
- 没有副作用的方法的返回值被忽略(仅当方法没有产生除返回值以外的任何效果时)
到目前为止,最好的选择似乎是#3,但它需要我在我的巨大项目中注释每个方法或类。Java 9+ 似乎允许在包级别进行注释,但这对我来说不是一个选择。即使是这样,该项目也有很多包。我真的想要一种方法来配置它以通过一个/几个位置应用于我的整个项目,而不是需要修改每个文件。
最后,我遇到了这个 Stack Overflow答案,它告诉我 IntelliJ 使用“报告所有忽略的非库调用”检查进行了此检查。就在 IDE 中突出显示而言,这样做似乎有效。但我希望这会导致 CI 失败。我发现有一种方法可以使用 intelliJ 工具通过命令行触发它,但这仍然会输出一个 XML/JSON 文件,我需要编写自定义代码来解析该输出。我还需要在 CI 机器上安装 IDE 工具,这似乎有点矫枉过正。
有谁知道实现我想要的更好的方法?我不能成为第一个只关心假阴性而不关心假阳性的人。我觉得应该可以管理任何当前未使用的返回值被记录或明确声明返回值通过注释故意忽略它或分配给变量约定,就像他们在容易出错时所做的那样
scala - 未解决的 SBT 依赖 com.google.errorprone#error_prone_annotations;[2.3.2,2.3.3]:未找到
我正在尝试通过 sbt 添加容易出错的依赖项,但它无法解决其中一个容易出错的依赖项。我是 Java/Scala 开发的新手,非常感谢您的帮助!以下是我得到的错误。
[error] (providers / update) sbt.librarymanagement.ResolveException: unresolved dependency: com.google.errorprone#error_prone_annotations;[2.3.2,2.3.3]: not found [error] download failed: com.google.errorprone#error_prone_annotations;2.3.2!error_prone_annotations.jar [error] Total time: 10 s, completed Aug 13, 2020 10:40:27 AM
java - 我如何建议用户将此参数包装在方法调用中?
我们在代码审查中发现的一个常见问题是人们写这个:
而不是这个:
为了更快地抓住它,我想我会尝试编写一个自定义的容易出错的检查。虽然这是一个记录不充分的领域,所以我一直在通过在 GitHub 中挖掘工作示例来做到这一点。
我到目前为止:
我的问题是我无法弄清楚如何从SuggestedFixes
. 我想知道这个 API 是否没有很好地充实,或者我是否完全走错了路,应该以更好的方式编写检查?
java - 什么是 Javadoc 摘要片段?
我正在尝试按照Error Prone的建议遵守Java 样式指南。
第7.2 节摘要片段指出以下内容:
每个 Javadoc 块都以一个简短的摘要片段开头。这个片段非常重要:它是文本中唯一出现在某些上下文(例如类和方法索引)中的部分。
这是一个片段——一个名词短语或动词短语,而不是一个完整的句子。它不以 A {@code Foo} is a... 开头,或者 This method returns...,也不是像 Save the record. 这样形成完整的祈使句。但是,片段大写并带有标点,就好像它是一个完整的句子。
这是我想知道的:
- 究竟什么是摘要片段?据说每个 Javadoc 块都以它开头并且它是文本,但是是否有更多的文档可供我阅读以更好地理解它?
- 为什么摘要片段非常重要?据说它出现在类和方法索引中,但我不确定我理解这意味着什么或为什么它很重要。我最好的猜测是,这是一种标记类及其成员的方式,这样更容易搜索它们。
- 我在哪里可以找到并阅读摘要片段?我正在使用 IntelliJ IDEA,所以我知道如何通过检查访问代码中的类和成员的 Javadoc,但是有没有办法列出所有可用的摘要片段?
maven - 如何修复maven容易出错的编译问题
我在 Git 上有一个 java 项目,我使用 Intellij(2020.3 Ultimate) git 插件将代码下载到我的本地,之后我做了以下操作
- 安装了 Oracle JDK 11
- 为此项目在 Intellij 中将 Oracle JDK 11 配置为我的 java 编译器。
- 将 Maven 3.6.3 下载到我的本地并与我的 Intellij 集成。
- 之后,我可以在 Maven 视图中看到 Lifecycle 下的安装。
- 然后我点击安装
过了一会儿,maven-compiler-plugin:3.8.1:compile (default-compile) @xxxx 正在运行。然后突然,我得到了这个错误:
我检查了我的项目的依赖关系树,这里只有一个容易出错的调用
有人对这个问题有想法吗?
java - Java:找不到插件:ErrorProne
我有一个 java 项目,我有这个项目的以下设置。
IDE:Intellij Ultimate 2020.03 JDK:Oracle 11.0.1 Maven:3.6.3
然后,在 Compiler -> Java Compiler -> Override compiler parameters per-module: Compilation optinos 下,我有
但是当我点击构建时,我总是得到这个错误 -
java:找不到插件:ErrorProne
我应该为这个项目配置什么?
gradle - Gradle 多模块项目容易出错
如何为多模块 Gradle 项目中的某些模块启用容易出错的功能?我希望能够为多个模块(不是全部)打开易出错的功能。