Eric Milles created GROOVY-11403:
------------------------------------

             Summary: property semantics of map-based types (pt.2)
                 Key: GROOVY-11403
                 URL: https://issues.apache.org/jira/browse/GROOVY-11403
             Project: Groovy
          Issue Type: Improvement
            Reporter: Eric Milles
            Assignee: Eric Milles


Consider the following:
{code:groovy}
import groovy.transform.*
class M implements Map<String,String> {
  @Delegate Map<String,String> map = [:].withDefault{ 'entry' }

  public        a = 'field'
  protected     b = 'field'
  @PackageScope c = 'field'
  private       d = 'field'
  Closure       e = { 'called' }

  public        getF() { 'getter' }
  protected     getG() { 'getter' }
  @PackageScope getH() { 'getter' }
  private       getI() { 'getter' }

  public        void setF(f) { 'setter' }
  protected     void setG(g) { 'setter' }
  @PackageScope void setH(h) { 'setter' }
  private       void setI(i) { 'setter' }

  void testRead1() {
    println a         // field
    println b         // field
    println c         // field
    println d         // field
    println e         // proper
    println f         // getter
    println g         // entry
    println h         // entry
    println i         // entry
    println j         // entry
    println empty     // entry
    println metaClass // field
    println "";
    {->
    println a         // field
    println b         // entry
    println c         // entry
    println d         // entry
    println e         // proper
    println f         // getter
    println g         // entry
    println h         // entry
    println i         // entry
    println j         // entry
    println empty     // entry
    println metaClass // getter (of Closure)
    }()
  }

  void testRead2() {
    println this.a         // field
    println this.b         // field
    println this.c         // field
    println this.d         // field
    println this.e         // proper
    println this.f         // getter
    println this.g         // entry
    println this.h         // entry
    println this.i         // entry
    println this.j         // entry
    println this.empty     // entry
    println this.class     // entry
    println this.metaClass // field
    println "";
    {->
    println this.a         // field
    println this.b         // entry
    println this.c         // entry
    println this.d         // entry
    println this.e         // proper
    println this.f         // getter
    println this.g         // entry
    println this.h         // entry
    println this.i         // entry
    println this.j         // entry
    println this.empty     // entry
    println this.class     // entry
    println this.metaClass // getter
    }()
  }

  void testRead3() {
   def that = this
    println that.a         // field
    println that.b         // entry
    println that.c         // entry
    println that.d         // entry
    println that.e         // proper
    println that.f         // getter
    println that.g         // entry
    println that.h         // entry
    println that.i         // entry
    println that.j         // entry
    println that.empty     // entry
    println that.class     // entry
    println that.metaClass // field
    println "";
    {->
    println that.a         // field
    println that.b         // entry
    println that.c         // entry
    println that.d         // entry
    println that.e         // proper
    println that.f         // getter
    println that.g         // entry
    println that.h         // entry
    println that.i         // entry
    println that.j         // entry
    println that.empty     // entry
    println that.class     // entry
    println that.metaClass // getter
    }()
  }
}
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to