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

Private field and method use from subclass is inconsistent

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 4.0.0-rc-2
    • None
    • None

    Description

      This is probably just a slice of GROOVY-1591, GROOVY-3010, GROOVY-3142, GROOVY-5438, et al.

      Adding "super." qualifier causes strange behaviors. Consider the following:

      class Foo {
        private String field = 'field'
        private String method() { 'method' }
      }
      class Bar extends Foo {
        def baz() {
          field // MissingPropertyException: No such property: field for class: Bar
          method() // MissingMethodException: No signature of method: Bar.method()
          this.field // MissingPropertyException: No such property: field for class: Bar
          this.method() // MissingMethodException: No signature of method: Bar.method()
      
          super.@field // MissingFieldException: No such field: field for class: Bar -- fixed by GROOVY-8999
      
          // so far, so good -- although Groovy allows access to private fields and methods from outside of Bar and Foo
      
          super.field // MissingMethodException: No signature of method: Bar.getField() -- that's strange
          super.method() // returns "method" -- Why is this okay?
          (super.&method)() // MissingMethodException: No signature of method: Bar.method() is applicable for argument types: () values: []
        }
      }
      

      Attachments

        Issue Links

          Activity

            People

              emilles Eric Milles
              emilles Eric Milles
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: