Feedback on proposal for #ReflectiveAccessToNonExportedTypes

Andrew Dinn adinn at redhat.com
Tue Jul 12 09:28:12 UTC 2016


On 11/07/16 12:02, Alan Bateman wrote:
>> That option may well be the status quo as of JDK8 but with JDK9 it is
>> the status quo in a changed world. Firstly, this so-called status quo
>> significantly undermines the point and utility of Jigsaw since
>> effectively it negates it's presence at runtime for large parts of the
>> code base. So, you get compile-time checking but you don't get any
>> runtime enforcement.

> It means that public types in these packages are accessible to other
> components. Non-public types/members would not be accessible of course,
> at least not without suppressing access checks (= setAccessible when
> using core reflection).

I think I need to ask you to clarify this as it doesn't seem to
recognise the point I was making. Of course, that may well indicate that
I have failed to understand the precise behaviour of exports dynamic.

Let us assume Module M exports dynamic P, where P is a package which
contains a public class C_pub and a non-public class C_pri (let's say it
is package-protected).

My understanding is that this means that:

Java source files for classes not in module M which import these classes
or reference them by name will suffer a compile-time error.

References to the corresponding instances of class Class for C_pub or
C_pri may nevertheless be obtained by methods of classes not in Module M
at runtime (e.g. using a classloader lookup by name).

References to members of these classes (methods or fields) may be
obtained by methods of classes not in Module M (e.g. by using the public
API of Class).

Calls to setEnabled(true) on those members will succeed even when the
calling method is not in class M (assuming the call is not invalidated
by the usual (mon-module) security restrictions)

The latter is so irrespective of whether we are referring to class C_pub
or C_pri and irrespective of whether the member of C_pub or C_pri in
question is public or non-public.

I'd be grateful if you could confirm or contradict any of these points.

regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander


More information about the jigsaw-dev mailing list