Should setAccessible be part of Java or not? (was Re: It's not too late for access control)

David M. Lloyd david.lloyd at redhat.com
Thu Jul 14 13:41:52 UTC 2016


On 07/14/2016 05:28 AM, Alan Bateman wrote:
> On 14/07/2016 11:16, Andrew Haley wrote:
>
>> :
>> OK.  But "in the very long term" such a basic language change needs
>> all stakeholders to be consulted.
> I agree (although it's not really a language change in that it's API way
> to suppress access checks specified by the language).
>
>> :
>> Yes, indeed, and that is potentially a significant problem.  My
>> comment stands: there is a serious possibility that his will make it
>> impossible to use (non-exported) Jigsaw modules for some kinds of
>> programming.  This is exactly the kind of decision that needs all
>> stakeholders to be consulted.
>>
>> It ought to be possible to have some kind of conditional export which
>> only allows such access by (e.g.)  suitably privileged frameworks or
>> tools.  But I have no desire to get involved in such design issues: I
>> am only going to say that this is an issue which requires wider
>> consultation.
>>
> This is #ReflectiveAccessToNonExportedTypes on the JSR 376 issues list.
> The problem is reasonably well understood and there are several
> proposals and approaches being discussed and considered.

An important aspect of my proposal is that, by separating exports from 
accessibility, any framework which operates on public classes will 
continue to work without any modifications to exports.  Dropping 
'setAccessible' becomes more of a likelihood when frameworks have *some* 
option (like the ability to reflect any public class) available to them; 
even if it means, long-term, that these specifications and frameworks 
slowly have to make their way towards operating only on public classes.

In fact I would say that it makes a hypothetical migration path 
available for this purpose:

Time  Action
----  ------
    0  Jigsaw introduces friend packages
    1  Frameworks slowly move to hide non-public public things
    n  Java makes setAccessible() disablable via some --safe-mode switch
       Users begin to move to public types for their frameworked classes
    m  Java makes --safe-mode the default, adds --unsafe-mode for legacy 
things
       More users move to public types
    z  Java drops support for --unsafe-mode, setAccessible throws UOE 
forever after

In this example, n could even equal 0 - that is, we could start this 
right now.

-- 
- DML


More information about the jigsaw-dev mailing list