Marcin Erdmann created GROOVY-8377: -------------------------------------- Summary: hashCode() generated by @EqualsAndHashCode is inefficient for instances with null fields or properties Key: GROOVY-8377 URL: https://issues.apache.org/jira/browse/GROOVY-8377 Project: Groovy Issue Type: Bug Affects Versions: 2.6.0-alpha-2, 2.5.0-beta-2, 2.4.12 Reporter: Marcin Erdmann
In a project I work on there is a relatively large hash map for which the key type has a {{@EqualsAndHashCode}} generated {{hashCode()}}. After introducing an additional property to the key type, for which the value is {{null}} on most instances, I noticed a massive degradation in efficiency of adds to the aforementioned map. After some digging around it turns out that the AST generated by that transform performs an identity check using {{is()}} between the property/field value and {{this}}. In cases where the property/field value is {{null}} this leads to a {{NullObject.is()}} call, for which, as far as I understand, no call site caching occurs. A PR with a jmh benchmark and a very simple fix to follow. -- This message was sent by Atlassian JIRA (v6.4.14#64029)