You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jacek Lewandowski (Jira)" <ji...@apache.org> on 2023/07/06 09:29:00 UTC
[jira] [Commented] (CASSANDRA-18239) Replace eclipse warnings based static code analysis with something better (CheckerFramework)
[ https://issues.apache.org/jira/browse/CASSANDRA-18239?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17740522#comment-17740522 ]
Jacek Lewandowski commented on CASSANDRA-18239:
-----------------------------------------------
h3. Summary
CheckerFramework is added to the build and introduces the following user-visible targets and properties:
h4. Targets:
* {{cf-all}} - Run CheckerFramework against all production source files. This goal is intended to be run on CI.
* {{cf-diff}} - Run CheckerFramework against all changed production source files compared to the latest common ancestor between HEAD and trunk. This goal is intended to be run locally before starting CI.
* {{cf}} - Run CheckerFramework against changed production source files (staged for commit). This is the default goal an engineer should execute before committing changes.
* {{cf-only}} - Run CheckerFramework against production source files specified in {{cf.check.only}} property (comma separated file paths under {{src/java}} or glob patterns, for example {{-Dcf.check.only=org/apache/cassandra/utils/**}}).
h4. Properties:
* {{cf.check.only}} - Specify a glob pattern of source files for CheckerFramework to verify
* {{cf.skip}} - When set to true, CheckerFramework execution is silently skipped
* {{cf.verbose}} - Enable verbose output from the CheckerFramework
The number of suppressed false-positive, resource-based warnings has been reduced from ~230 to ~60.
CheckerFramework jars are fetched into a separate directory and not included in the distribution. The only jar included in the distribution contains CheckerFramework-specific annotations, and it has been included before as a dependency of some of the libraries we use. That one jar is distributed under a compatible license.
I've filed a couple of issues in the CheckerFramework project, which, when fixed, will allow for further reduction of warning suppression. They release a new version every month and respond very quickly to the problems we report.
> Replace eclipse warnings based static code analysis with something better (CheckerFramework)
> --------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-18239
> URL: https://issues.apache.org/jira/browse/CASSANDRA-18239
> Project: Cassandra
> Issue Type: Task
> Components: Build
> Reporter: Jacek Lewandowski
> Assignee: Jacek Lewandowski
> Priority: Normal
> Fix For: 5.x
>
>
> Eclipse warnings is used for static code analysis. However, it does not fit well into Cassandra code and practically we end up explicitly adding suppressions in many places just to satisfy that tool rather than fix the real issues.
> This is an incomplete list of reasons to remove it:
> - not closed resources are detected incorrectly
> - does not recognize custom utility methods used to close the resources, which use use heavily in the code, like {{{}Throwables.close{}}}, {{{}FileUtils.close{}}}, {{{}closeQuietly{}}}...
> - because of the above, we cannot make important things like {{Ref}} to implement {{Closeable}} as it would make the tool to explode with tons of warnings
> - it complains about correct generics - something like "method X is not applicable for ..." when the code compiles successfully is not acceptable
> - it is old and not maintained
> There are better tools like IntelliJ inspections for example, which can also be run in headless mode
> As agreed on the [dev mailing list|https://lists.apache.org/thread/8ok01odwx79crxw45cnfh0n1j4nsf9cp] we will replace it in trunk with CheckerFramework.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org