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)

Reply via email to