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)