RFR: 8200289: Reduce number of exceptions created when calling Lookup::canBeCached
Paul Sandoz
paul.sandoz at oracle.com
Tue Mar 27 16:07:39 UTC 2018
2038 MemberName resolveOrNull(byte refKind, MemberName member) throws ReflectiveOperationException {
2039 // do this before attempting to resolve
2040 if (!isClassAccessible(member.getDeclaringClass())) {
2041 return null;
2042 }
2043 Objects.requireNonNull(member.getName());
2044 Objects.requireNonNull(member.getType());
2045 return IMPL_NAMES.resolveOrNull(refKind, member, lookupClassOrNull());
2046 }
2047
2048 void checkSymbolicClass(Class<?> refc) throws IllegalAccessException {
2049 if (!isClassAccessible(refc)) {
2050 throw new MemberName(refc).makeAccessException("symbolic reference class is not accessible", this);
2051 }
2052 }
...
2499 try {
2500 MemberName resolved2 = publicLookup().resolveOrNull(refKind,
2501 new MemberName(refKind, defc, member.getName(), member.getType()));
2502 if (resolved2 == null) {
2503 return false;
2504 }
2505 checkSecurityManager(defc, resolved2);
2506 } catch (ReflectiveOperationException | SecurityException ex) {
2507 return false;
2508 }
Is it (or was it ever) possible for these methods paths to throw IllegalAccessException / ReflectiveOperationException?
Paul.
> On Mar 27, 2018, at 5:02 AM, Claes Redestad <claes.redestad at oracle.com> wrote:
>
> Sundar,
>
> On 2018-03-27 13:23, Sundararajan Athijegannathan wrote:
>> Hi,
>>
>> + if (caller != null&& !VerifyAccess.isClassAccessible(refc, caller, allowedModes)) {
>> + return false;
>> + }
>> + return true;
>>
>>
>> can be
>>
>> return caller == null || VerifyAccess.isClassAccessible(refc, caller, allowedModes);
>
> agreed, updated in-place.
>
>>
>> +1
>
> Thanks for reviewing!
>
> /Claes
More information about the core-libs-dev
mailing list