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

Regression in property access for conflicting isXxx and getXxx accessors

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Information Provided
    • 4.0.3
    • None
    • None
    • None

    Description

      In upgrading our codebase from Groovy 3.0.11 to 4.0.3, we noticed a regression in method selection when using property access. This toy example illustrates the issue:

      class Base {
         boolean isFirstChild() { return true }
      }
      
      class Sub extends Base {
         String getFirstChild() { return "hello" }
      }
      
      class SubSub extends Sub { }
      
      assert new SubSub().firstChild instanceof String
      

       

      This code passes in Groovy 3 but fails in Groovy 4. We observed this real-world behavior with xerces:xercesImpl:2.12.1 where an instance of class org.apache.xerces.dom.ParentNode has both methods getFirstChild() returning a Node and isFirstChild() returning a boolean.

      As a workaround, we can access getFirstChild() by name instead of using property access, but in discussions with paulk this behavior change may be unintended.

      Attachments

        Issue Links

          Activity

            People

              emilles Eric Milles
              DPUkyle Kyle Moore
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: