question on exports to
Jochen Theodorou
blackdrag at gmx.org
Fri Jun 3 18:49:55 UTC 2016
On 01.06.2016 20:54, Peter Levart wrote:
[...]
> Modules are part of language. Their exports / requires form a logical
> layer of additional access checks to what we had before
> (public/protected/package/private qualifiers on classes / members), but
> are treated the same way during runtime. Together they form language
> accessibility rules. There are exceptions, notably in reflection:
> - Member.setAccessible(true) can not be used to circumvent lack of exports
> - readability is implicitly provided for reflective access in general
so if I load a class that tries to use a class from a different module
and this class is not exported, the call will fail? I am talking here
about invokevirtual and the others. Sure, that is not supposed to
compile, but java is not the only things that generates bytecode. I
somehow fail to believe that for each invocation of a method the module
system is checked... or that such a class will fail verification...
which I also find difficult to believe. Your second point actually
suggests that there is some kind of post compilation check. Could you
please confirm if there is or not?
> So the trick with Lookup shown above can be used to invoke a private or
> package-private method via TheInvoker.invoke() like it was invoked directly:
>
> class MyOtherClass {
> private void myPrivateMethod() {
> ...
> }
>
> void someMethod() {
> TheInvoker.invoke(MethodHandles.lookup(), this, "myPrivateMethod");
> }
> }
>
> ...as well as other public methods in modules that export packages to
> the Lookup owner (the module of the class that obtains the Lookup object
> via MethodHandles.lookup()).
that is actually good for our invokedynamic part.
bye Jochen
More information about the jigsaw-dev
mailing list