Scott Murphy Heiberg created GROOVY-12718:
---------------------------------------------
Summary: super.f, super.@f and this.@f of a package-private field
of a superclass of another class loader fail with IllegalAccessError in dynamic
code
Key: GROOVY-12718
URL: https://issues.apache.org/jira/browse/GROOVY-12718
Project: Groovy
Issue Type: Bug
Affects Versions: 5.0.8, 4.0.32, 6.0.0
Reporter: Scott Murphy Heiberg
{code:groovy}
def shell = new GroovyShell()
shell.evaluate '''package p
class F { @groovy.transform.PackageScope String pf = 'pf' }
true'''
shell.evaluate '''package p
class C extends F {
def test() {
assert pf == 'pf' // works
assert this.pf == 'pf' // works
super.pf // IllegalAccessError, as are super.@pf,
this.@pf and writes through them
}
}
new C().test()'''
{code}
*Actual:* {{IllegalAccessError: class p.C tried to access field p.F.pf}}.
*Expected:* the value of the field, through the meta-class, as for {{pf}} and
{{this.pf}}.
Cause: {{F}} comes from an earlier parse, so it has the same package name as
{{C}} but another class loader, which makes it another run-time package.
{{AsmClassGenerator.visitPropertyExpression}} and {{visitAttributeExpression}}
decide by the package name and write {{GETFIELD}} or {{PUTFIELD}}, in dynamic
and {{@TypeChecked}} code too.
Verified on 4.0.32, 5.0.8, 6.0.0 and master.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)