Proposal: #ReflectiveAccessToNonExportedTypes: `exports dynamic`

Alex Buckley alex.buckley at oracle.com
Thu Jun 30 21:02:34 UTC 2016


Volker,

Please share details of why your application needs to reflect over the 
internals of another module.

Alex

On 6/30/2016 1:09 PM, Volker Berlin wrote:
> Reflection should be enabled by default. My current launcher for Java 9
> check if the needed refection is possible. If not possible then it
> restart the application with a very long list of -XaddExports switches.
> I think this is not what we want.
>
> Volker Berlin
> i-net software
>
>
> Am 28.06.2016 um 23:18 schrieb Mark Reinhold:
>> Issue summary
>> -------------
>>
>>    #ReflectiveAccessToNonExportedTypes --- Some kinds of framework
>>    libraries require reflective access to members of the non-exported
>>    types of other modules; examples include dependency injection (Guice),
>>    persistence (JPA), debugging tools, code-automation tools, and
>>    serialization (XStream).  In some cases the particular library to be
>>    used is not known until run time (e.g., Hibernate and EclipseLink both
>>    implement JPA).  This capability is also sometimes used to work around
>>    bugs in unchangeable code.  Access to non-exported packages can, at
>>    present, only be done via command-line flags, which is extremely
>>    awkward.  Provide an easier way for reflective code to access such
>>    non-exported types. [1]
>>
>> Proposal
>> --------
>>
>> Extend the language of module declarations so that a package can be
>> declared to be exported at run time but not at compile time.  This is,
>> roughly, the dual of the `requires static` construct proposed for
>> #CompileTimeDependences, hence we propose to introduce a new modifier,
>> `dynamic`, for use on the `exports` directive.  It has the following
>> meanings:
>>
>>    - At compile time, `exports dynamic P` does not cause the package `P`
>>      to be exported, though it does require `P` to be a package defined
>>      in the module.
>>
>>    - In phases after compile time, `exports dynamic P` behaves in exactly
>>      the same way as `exports P`.  It therefore takes part fully in
>>      resolution and configuration, and is subject to the same consistency
>>      constraints as normally-exported packages (e.g., no split packages).


More information about the jpms-spec-observers mailing list