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

Name in delegate block is resolved to (inexisting) field rather than (existing) getter

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.2.0-beta-1
    • 2.2.0
    • Static Type Checker
    • None

    Description

      class Car {
        private String _brand
        String getBrand() { _brand }
        void setBrand(String brand) { _brand = brand }
      }
      
      class Builder {
        def <T> T configure(@DelegatesTo.Target Class<T> target, @DelegatesTo(genericTypeIndex=0) Closure cl) {
          def obj = target.newInstance() 
          cl.delegate = obj
          cl.resolveStrategy = Closure.DELEGATE_FIRST
          cl.call()
          obj 
        }
      }
      
      @groovy.transform.TypeChecked
      class Main {
        void run() {
          def builder = new Builder()
          def car = builder.configure(Car) {
            brand = brand // [Static type checking] - The variable [brand] is undeclared.
          }
        }
      }
      
      new Main().run()
      

      Attachments

        Activity

          People

            blackdrag Jochen Theodorou
            pniederw Peter Niederwieser
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: