< prev index next >

src/java.base/share/classes/java/lang/invoke/MethodHandles.java

Print this page




 818             if (allowedModes == TRUSTED)  // IMPL_LOOKUP can make any lookup at all
 819                 return new Lookup(requestedLookupClass, FULL_POWER_MODES);
 820             if (requestedLookupClass == this.lookupClass)
 821                 return this;  // keep same capabilities
 822             int newModes = (allowedModes & FULL_POWER_MODES);
 823             if (!VerifyAccess.isSameModule(this.lookupClass, requestedLookupClass)) {
 824                 // Need to drop all access when teleporting from a named module to another
 825                 // module. The exception is publicLookup where PUBLIC is not lost.
 826                 if (this.lookupClass.getModule().isNamed()
 827                     && (this.allowedModes & UNCONDITIONAL) == 0)
 828                     newModes = 0;
 829                 else
 830                     newModes &= ~(MODULE|PACKAGE|PRIVATE|PROTECTED);
 831             }
 832             if ((newModes & PACKAGE) != 0
 833                 && !VerifyAccess.isSamePackage(this.lookupClass, requestedLookupClass)) {
 834                 newModes &= ~(PACKAGE|PRIVATE|PROTECTED);
 835             }
 836             // Allow nestmate lookups to be created without special privilege:
 837             if ((newModes & PRIVATE) != 0
 838                 && !Reflection.areNestMates(this.lookupClass, requestedLookupClass)) {
 839                 newModes &= ~(PRIVATE|PROTECTED);
 840             }
 841             if ((newModes & PUBLIC) != 0
 842                 && !VerifyAccess.isClassAccessible(requestedLookupClass, this.lookupClass, allowedModes)) {
 843                 // The requested class it not accessible from the lookup class.
 844                 // No permissions.
 845                 newModes = 0;
 846             }
 847 
 848             checkUnprivilegedlookupClass(requestedLookupClass);
 849             return new Lookup(requestedLookupClass, newModes);
 850         }
 851 
 852 
 853         /**
 854          * Creates a lookup on the same lookup class which this lookup object
 855          * finds members, but with a lookup mode that has lost the given lookup mode.
 856          * The lookup mode to drop is one of {@link #PUBLIC PUBLIC}, {@link #MODULE
 857          * MODULE}, {@link #PACKAGE PACKAGE}, {@link #PROTECTED PROTECTED} or {@link #PRIVATE PRIVATE}.
 858          * {@link #PROTECTED PROTECTED} and {@link #UNCONDITIONAL UNCONDITIONAL} are always




 818             if (allowedModes == TRUSTED)  // IMPL_LOOKUP can make any lookup at all
 819                 return new Lookup(requestedLookupClass, FULL_POWER_MODES);
 820             if (requestedLookupClass == this.lookupClass)
 821                 return this;  // keep same capabilities
 822             int newModes = (allowedModes & FULL_POWER_MODES);
 823             if (!VerifyAccess.isSameModule(this.lookupClass, requestedLookupClass)) {
 824                 // Need to drop all access when teleporting from a named module to another
 825                 // module. The exception is publicLookup where PUBLIC is not lost.
 826                 if (this.lookupClass.getModule().isNamed()
 827                     && (this.allowedModes & UNCONDITIONAL) == 0)
 828                     newModes = 0;
 829                 else
 830                     newModes &= ~(MODULE|PACKAGE|PRIVATE|PROTECTED);
 831             }
 832             if ((newModes & PACKAGE) != 0
 833                 && !VerifyAccess.isSamePackage(this.lookupClass, requestedLookupClass)) {
 834                 newModes &= ~(PACKAGE|PRIVATE|PROTECTED);
 835             }
 836             // Allow nestmate lookups to be created without special privilege:
 837             if ((newModes & PRIVATE) != 0
 838                 && !VerifyAccess.areNestMates(this.lookupClass, requestedLookupClass)) {
 839                 newModes &= ~(PRIVATE|PROTECTED);
 840             }
 841             if ((newModes & PUBLIC) != 0
 842                 && !VerifyAccess.isClassAccessible(requestedLookupClass, this.lookupClass, allowedModes)) {
 843                 // The requested class it not accessible from the lookup class.
 844                 // No permissions.
 845                 newModes = 0;
 846             }
 847 
 848             checkUnprivilegedlookupClass(requestedLookupClass);
 849             return new Lookup(requestedLookupClass, newModes);
 850         }
 851 
 852 
 853         /**
 854          * Creates a lookup on the same lookup class which this lookup object
 855          * finds members, but with a lookup mode that has lost the given lookup mode.
 856          * The lookup mode to drop is one of {@link #PUBLIC PUBLIC}, {@link #MODULE
 857          * MODULE}, {@link #PACKAGE PACKAGE}, {@link #PROTECTED PROTECTED} or {@link #PRIVATE PRIVATE}.
 858          * {@link #PROTECTED PROTECTED} and {@link #UNCONDITIONAL UNCONDITIONAL} are always


< prev index next >