Testing whether or not a Lookup object has access to members
Mandy Chung
mandy.chung at oracle.com
Fri Oct 26 14:55:17 UTC 2018
You can submit from https://bugreport.java.com/bugreport/
Mandy
On 10/26/18 2:48 AM, Kasper Nielsen wrote:
> 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
> <mailto: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
>> <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