< prev index next >

src/java.base/share/classes/sun/invoke/util/VerifyAccess.java

Print this page




 334      * @param class1 a class
 335      * @param class2 another class
 336      * @return whether they are in the same package
 337      */
 338     public static boolean isSamePackage(Class<?> class1, Class<?> class2) {
 339         assert(!class1.isArray() && !class2.isArray());
 340         if (class1 == class2)
 341             return true;
 342         if (class1.getClassLoader() != class2.getClassLoader())
 343             return false;
 344         return Objects.equals(class1.getPackageName(), class2.getPackageName());
 345     }
 346 
 347     /**
 348      * Test if two classes are defined as part of the same package member (top-level class).
 349      * If this is true, they can share private access with each other.
 350      * @param class1 a class
 351      * @param class2 another class
 352      * @return whether they are identical or nested together
 353      */
 354     public static boolean areNestMates(Class<?> class1, Class<?> class2) {
 355         if (class1 == class2)
 356             return true;
 357         if (!isSamePackage(class1, class2))
 358             return false;
 359         if (Reflection.areNestMates(class1, class2))
 360             return true;
 361         // Could be pre-nestmate nested types
 362         if (getOutermostEnclosingClass(class1) != getOutermostEnclosingClass(class2))
 363             return false;
 364         return true;
 365     }
 366 
 367     private static Class<?> getOutermostEnclosingClass(Class<?> c) {
 368         Class<?> pkgmem = c;
 369         for (Class<?> enc = c; (enc = enc.getEnclosingClass()) != null; )
 370             pkgmem = enc;
 371         return pkgmem;
 372     }
 373 
 374     private static boolean loadersAreRelated(ClassLoader loader1, ClassLoader loader2,
 375                                              boolean loader1MustBeParent) {
 376         if (loader1 == loader2 || loader1 == null
 377                 || (loader2 == null && !loader1MustBeParent)) {
 378             return true;
 379         }
 380         for (ClassLoader scan2 = loader2;
 381                 scan2 != null; scan2 = scan2.getParent()) {




 334      * @param class1 a class
 335      * @param class2 another class
 336      * @return whether they are in the same package
 337      */
 338     public static boolean isSamePackage(Class<?> class1, Class<?> class2) {
 339         assert(!class1.isArray() && !class2.isArray());
 340         if (class1 == class2)
 341             return true;
 342         if (class1.getClassLoader() != class2.getClassLoader())
 343             return false;
 344         return Objects.equals(class1.getPackageName(), class2.getPackageName());
 345     }
 346 
 347     /**
 348      * Test if two classes are defined as part of the same package member (top-level class).
 349      * If this is true, they can share private access with each other.
 350      * @param class1 a class
 351      * @param class2 another class
 352      * @return whether they are identical or nested together
 353      */
 354     public static boolean isSamePackageMember(Class<?> class1, Class<?> class2) {
 355         if (class1 == class2)
 356             return true;
 357         if (!isSamePackage(class1, class2))
 358             return false;



 359         if (getOutermostEnclosingClass(class1) != getOutermostEnclosingClass(class2))
 360             return false;
 361         return true;
 362     }
 363 
 364     private static Class<?> getOutermostEnclosingClass(Class<?> c) {
 365         Class<?> pkgmem = c;
 366         for (Class<?> enc = c; (enc = enc.getEnclosingClass()) != null; )
 367             pkgmem = enc;
 368         return pkgmem;
 369     }
 370 
 371     private static boolean loadersAreRelated(ClassLoader loader1, ClassLoader loader2,
 372                                              boolean loader1MustBeParent) {
 373         if (loader1 == loader2 || loader1 == null
 374                 || (loader2 == null && !loader1MustBeParent)) {
 375             return true;
 376         }
 377         for (ClassLoader scan2 = loader2;
 378                 scan2 != null; scan2 = scan2.getParent()) {


< prev index next >