I'm always in favor of having the compiler/runtime do more work for us, but I guess in the interest of gauging impact to dev productivity, does this add much overhead? I guess we'll need to discuss what it finds after it runs, as well.
Cheers, Derek On Mon, Nov 7, 2022 at 4:10 PM David Capwell <dcapw...@apple.com> wrote: > > I was thinking that it would be good to add SpotBugs > (https://spotbugs.github.io) into our build to help find bugs earlier in the > life cycle. SpotBugs is LGPL but as it is used only in the build and not to > within this project, then this should be fine with Apache. > > The motivation for adding this was from CASSANDRA-17178; the Simulator has > issues with Serializable classes missing serialVersionUID (as we deal with > ClassLoaders; this field is strongly recommend in general for all > Serializable classes), but this project can add more value as there are a > large collection of potential bugs to look out for; below are a few examples > found. > > * Number.valueOf vs Number.parse<size>. In many parts of the code we do > valueOf which returns a boxed value; we then unbox for the usage; this adds > more garbage that isn’t needed > * Using Number.compareTo rather than primitive compare functions (causing > boxing) > * Ignoring return value for functions that don’t have a side effect. This > happens in a few cases where we are building a StringBuilder where we call > .toString but ignore the string… then call it later on > * use of putIfAbsent without looking at the return. This was found in > CacheService where we add the SSTable reader to the cache and assume we win > the race and start using it… rather than using the object that won the race -- +---------------------------------------------------------------+ | Derek Chen-Becker | | GPG Key available at https://keybase.io/dchenbecker and | | https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org | | Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC | +---------------------------------------------------------------+