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

STC: owner qualifier produces error for nested closures

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.0.0-alpha-4, 2.5.6
    • 3.0.0-beta-1, 2.5.7
    • None
    • None

    Description

      In the example script below, the use of the "owner" qualifier causes an error. Replace with "delegate" and no error. Disable static compilation and no error.

      class C1 {
        void m() {
          print 'outer delegate'
        }
      }
      class C2 {
        void m() {
          print 'inner delegate'
        }
      }
      void outer(@DelegatesTo(value = C1) Closure block) {
        block.delegate = new C1()
        block()
      }
      void inner(@DelegatesTo(value = C2, strategy = Closure.DELEGATE_FIRST) Closure block) {
        block.delegate = new C2()
        block()
      }
      
      @groovy.transform.CompileStatic // comment out and script prints "outer delegate" as expected
      void test() {
        outer {
          inner {
            owner.m() // "Cannot find matching method Script#m(). Please check if the declared type is right and if the method exists."
            // replace "owner" with "delegate" and CompileStatic has no error and prints "inner delegate" as expected
          }
        }
      }
      
      test()
      

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: