You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Anders Wallgren (Jira)" <ji...@apache.org> on 2020/05/27 01:17:00 UTC

[jira] [Created] (GROOVY-9575) ASTNode.hashCode violates Object.hashCodecontract: does not return consistent value

Anders Wallgren created GROOVY-9575:
---------------------------------------

             Summary: ASTNode.hashCode violates Object.hashCodecontract: does not return consistent value
                 Key: GROOVY-9575
                 URL: https://issues.apache.org/jira/browse/GROOVY-9575
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 3.0.4
            Reporter: Anders Wallgren


While upgrading groovy from 2.4.18 to 3.0.4 in a project we ran into a problem: ASTNode.hashCode uses mutable properties of the object to calculate the hash.

Those object properties are not, however, used when equals() is invoked on an ASTNode instance (as of 3.0.4 ASTNode does not implement equals).

This means ASTNode violates an important part of the Object.hashCode contract and you cannot safely put ASTNode instances into collections where the hashcode is relied upon to be consistent.

Quoting the contract Object.hashCode:
 * Whenever it is invoked on the same object more than once during an execution of a Java application, the {{hashCode}} method must consistently return the same integer, provided no information used in {{equals}} comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)