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

David Holmes david.holmes at oracle.com
Mon Nov 20 06:36:48 UTC 2017


Hi Peter,

On 20/11/2017 4:31 PM, Peter Levart wrote:
> 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?

That was my personal initial position too. But the EG discussions went 
elsewhere:

http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2017-October/000386.html

Cheers,
David

> 
> Regards, Peter
> 
>>
>> David
> 


More information about the valhalla-spec-observers mailing list