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

Access to private fields and methods from subclass exhibits strange behavior

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.4.16
    • 4.0.0-alpha-1, 3.0.5, 2.5.13
    • 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. Please 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()
      
          // 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.@field // MissingMethodException: No signature of method: Bar.getField() -- that's strange
          super.&method // returns MethodClosure that throws NPE when called:
          (super.&method)() // NullPointerException: Cannot invoke method call() on null object-- If super.method() works, why doesn't this?
        }
      }
      

      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:

                Time Tracking

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