Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-9575

ASTNode.hashCode violates Object.hashCode contract: does not return consistent value

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.0.4
    • 4.0.0-alpha-1, 3.0.5, 2.5.16
    • None
    • None

    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.

       

      Attachments

        Activity

          People

            daniel_sun Daniel Sun
            awallgren Anders Wallgren
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 1h
                1h