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)