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

STC: owner qualifier produces error for nested closures

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.0.0-alpha-4, 2.5.6
    • Fix Version/s: 3.0.0-beta-1, 2.5.7
    • Component/s: None
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: