[Nestmates] Add a core reflection API to get nestmate information

Peter Levart peter.levart at gmail.com
Mon Nov 20 06:31:09 UTC 2017


Hi David,

On 11/17/2017 11:44 AM, David Holmes wrote:
> Hi Peter,
>
> On 17/11/2017 7:45 PM, Peter Levart wrote:
>> Hi David,
>>
>> On 11/16/2017 10:52 PM, David Holmes wrote:
>>>>> John prefers to minimize exceptions for the Java API. :)
>>>>
>>>> Suppose that this is basic reflection API to get nestmate 
>>>> information and that it will also be used for reflective access 
>>>> checks. For example in 
>>>> jdk.internal.reflect.Reflection#verifyMemberAccess, which is used 
>>>
>>> It isn't. The reflection API is purely for "external" use. Real 
>>> access checks are performed in the same way as the VM access checks 
>>> - as required - and will report the same exceptions in the same way.
>>>
>>> David 
>>
>> Real access checks performed by bytecode(s), yes. But what about 
>> reflective access checks - those performed by Method.invoke, 
>> Field.[get|set], Constructor.newInstance? They will have to be 
>> revised some day to include the nestmates. What facility should those 
>> methods use to implement the checks (the guts of those checks is in 
>> jdk.internal.reflect.Reflection#verifyMemberAccess).
>
> Yes and the real nestmate access check for use by invoke etc has 
> already been implemented in there.
>
> http://hg.openjdk.java.net/valhalla/valhalla/file/df423aeaa8d1/src/java.base/share/classes/jdk/internal/reflect/Reflection.java 
>

Oh, sorry. I have been looking at wrong repository (jdk master) and 
thought the proposed core reflection nestmate API was the 1st change to 
reflection. I see you have already updated invoke/get/set/newInstance.

>
>> Is the plan to have special internal native methods to facilitate 
>> that? I don't quite understand why should a Class.isNestmateOf(Class) 
>> behave any differently than real VM access check.
>
> Purely because of the difference in exception handling. The view was 
> that the reflection API should mostly "absorb" exceptions.

Absorbing exceptions is generally a bad idea. In this particular case, 
you are trying to hide an implementation detail and instead lie to the 
user about the nest membership. Some information is lost on the way and 
that's not helping the user at all. Not being in the same nest and not 
being able to evaluate the answer are two different things and as much 
as someone might think the user shouldn't care, the need to discriminate 
them is probably going to arise and users will have to do sub-optimal 
things to accomplish that. Why not give them the precise tool to start with?

Regards, Peter

>
> David



More information about the valhalla-spec-observers mailing list