Testing whether or not a Lookup object has access to members

Kasper Nielsen kasperni at gmail.com
Fri Oct 26 09:48:35 UTC 2018


Hi Mandy,

I don't have access to JBS unfortunately.

Cheers
  Kasper

On Wed, 24 Oct 2018 at 16:50, Mandy Chung <mandy.chung at oracle.com> wrote:

> Can you file a JBS issue?
>
> Mandy
>
> On 10/23/18 12:15 PM, Kasper Nielsen wrote:
>
> Hi Mandy,
>
> Yes, that it was my code is doing now, I unreflect a member and then test
> if an exception is thrown.
> However, it is just a bit of an antipattern, catching exception to test a
> condition.
>
> I would prefer if something like this was available:
> boolean Lookup.isAccessible(Member member)
> boolean Lookup.isAccessible(Class<?> member)
>
>
> /Kasper
>
> On Tue, 23 Oct 2018 at 00:07, Mandy Chung <mandy.chung at oracle.com> wrote:
>
>> Lookup.accessClass(member.getDeclaringClass()) can be used to test
>> if the lookup class can access the declaring class of the given member.
>> This only checks if a class is accessible.  I think unreflecting a member
>> will do what you are looking for to check if the lookup object has access
>> to the member.  What does the code do if the Lookup object has access
>> vs has no access?
>>
>> Mandy
>>
>> On 10/22/18 1:17 PM, Kasper Nielsen wrote:
>>
>> Hi,
>>
>> Are there any elegant way to test if a Lookup object has access to a member
>> (field, constructor, method). Right now I'm using the following code
>>
>> public static boolean hasAccess(MethodHandles.Lookup lookup, Member member)
>> {
>>
>>     if (member instanceof Constructor) {
>>
>>         try {
>>
>>             lookup.unreflectConstructor((Constructor<?>) member);
>>
>>         } catch (IllegalAccessException e) {
>>
>>             return false;
>>
>>         }
>>
>>     } else if (member instanceof Method) {
>>
>>         try {
>>
>>             lookup.unreflect((Method) member);
>>
>>         } catch (IllegalAccessException e) {
>>
>>             return false;
>>
>>         }
>>
>>     } else if (member instanceof Field) {
>>
>>         try {
>>
>>             lookup.unreflectVarHandle((Field) member);
>>
>>         } catch (IllegalAccessException e) {
>>
>>             return false;
>>
>>         }
>>
>>     }
>>
>>     return true;
>>
>> }
>>
>> Cheers
>>   Kasper
>>
>>
>>
>


More information about the jigsaw-dev mailing list