Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.5.8, 3.0.0-rc-1
-
None
Description
Compilation fails when accessing a package-private super class field from inside a closure:
// error message: java.lang.IllegalAccessError: class a.ConcreteClass$_doThing_closure1 tried to access field a.Abstract_Class.superField (a.ConcreteClass$_doThing_closure1 is in unnamed module of loader groovy.lang.GroovyClassLoader$InnerLoader @5fa47fea; a.Abstract_Class is in unnamed module of loader groovy.lang.GroovyClassLoader$InnerLoader @28cda624) GroovyShell shell = new GroovyShell() shell.evaluate(''' package a import groovy.transform.CompileStatic @CompileStatic abstract class Abstract_Class { @groovy.transform.PackageScope String superField = 'field' abstract String doThing() } assert true ''') shell.evaluate(''' package a import a.Abstract_Class import groovy.transform.CompileStatic @CompileStatic class ConcreteClass extends Abstract_Class { @Override String doThing() { this.with { return this.superField } } } assert true ''') shell.evaluate("assert new a.ConcreteClass().doThing() == 'field'")
Attachments
Issue Links
- is a clone of
-
GROOVY-9292 Compilation error when accessing a protected super class field from a closure using owner, delegate or thisObject qualifier (different package)
- Closed