Testing whether or not a Lookup object has access to members
Mandy Chung
mandy.chung at oracle.com
Wed Oct 24 14:51:36 UTC 2018
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
> <mailto: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