Abstract: Manually implementing equals (for object comparisons) and
hashCode (for object hashing) methods in large software
projects is tedious and error-prone. This is due to many special cases,
such as field shadowing, comparison between different types, or cyclic
object graphs. Here, we present JEqualityGen, a source code generator
that automatically derives implementations of these methods.
JEqualityGen proceeds in two states: it first uses source code
reflection in MetaAspectJ to generate aspects that contain the method
implementations, before it uses weaving on the bytecode level to insert
these into the target application. JEqualityGen generates not only
correct, but efficient source code that on a typical large-scale Java
application exhibits a performance improvement of more than two orders
of magnitude in the equality operations generated, compared to an
existing system based on runtime reflection. JEqualityGen achieves this
by generating runtime profiling code that collects data. This
enables it to generate optimised method
implementations in a second round.