[ 
https://issues.apache.org/jira/browse/GROOVY-9575?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Anders Wallgren updated GROOVY-9575:
------------------------------------
    Description: 
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 Object.hashCode javadoc:
 * 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.

 

  was:
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.

 


> 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
>            Priority: Major
>
> 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 Object.hashCode javadoc:
>  * 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)

Reply via email to