Review Request: JDK-8173978: Lookup.in should allow teleporting from a lookup class in a named module without dropping all access

Peter Levart peter.levart at gmail.com
Fri Jul 5 19:29:30 UTC 2019


Hi Mandy,

Yes, either way will avoid double canRead/isExported calls against the 
same module. Although perhaps, an API with null prevModule would be more 
consistent with other API methods that use null prevLookupClass etc...

Regards, Peter

On 7/5/19 8:19 PM, Mandy Chung wrote:
>
>
> On 7/5/19 8:24 AM, Peter Levart wrote:
>> Hi Mandy,
>>
>> On 7/2/19 7:20 PM, Mandy Chung wrote:
>>> Webrev updated:
>>> http://cr.openjdk.java.net/~mchung/jdk14/8173978/webrev.01/
>>
>> I just skimmed across code and I think there's a little optimization 
>> possible in VerifyAccess:
>>
>>  :
>> ...instead of seting prevLookupModule to lookupModule in case 
>> prevLookupClass is null (common case) causing double canRead and 
>> isExported checks against the same module in isModuleAccessible() 
>> (for positive outcome - the case where we want the check to be quick):
>>
> alternatively, keep prevLookupModule = lookupModule if prevLookupClass 
> is null
>
>> :
>> ...and then check against null in isModuleAccessible():
>>
>
> and skip for the case where m1 == m2 like:
>
>    public static boolean isModuleAccessible(Class<?> refc, Module m1, 
> Module m2) {
>         Module refModule = refc.getModule();
>         assert refModule != m1 || refModule != m2;
>         int mods = getClassModifiers(refc);
>         if (isPublic(mods)) {
>             if (m1.canRead(refModule) && (m1 == m2 || 
> m2.canRead(refModule))) {
>                 String pn = refc.getPackageName();
>
>                 // refc is exported package to at least both m1 and m2
>                 if (refModule.isExported(pn, m1) && (m1 == m2 || 
> refModule.isExported(pn, m2)))
>                     return true;
>             }
>         }
>         return false;
>     }
>
> Mandy



More information about the core-libs-dev mailing list