Use cases for java.lang.Module.addExports
Alan Bateman
Alan.Bateman at oracle.com
Mon Dec 12 06:53:02 UTC 2016
On 12/12/2016 06:34, David Holmes wrote:
> Does addExports only affect reflective access to the module, or does
> it change all access? I'm trying to determine what the set of actions
> X will be such that:
>
> try {
> <X>;
> }
> catch (<some exception indicating X failed due to lack of export>) {
> execute( () -> mod.addExports(...)); // address the problem
> <X>; // now it succeeds
> }
It updates the module to export the package so that public types in that
package are accessible to bytecode, code reflection, also method handles.
As to what <X> is then it might be an access from bytecode (maybe
generated code or just a mismatch between the compile time and run time
environments that leads to IllegalAccessError).
More likely then <X> is using core reflection and an access check with
Constructor::newInstance, Method::invoke or Field::set fails with
IllegalAccessException. The retry in your example will succeed (assuming
the package is now exported to at least the caller and access is
otherwise allowed by the class/member modifiers). <X> could be something
using method handles too, say where a Lookup::findXXXX fails
IllegalAccessException.
-Alan
More information about the jigsaw-dev
mailing list