< prev index next >

test/java/lang/invoke/MethodHandles/privateLookupIn/test/p/PrivateLookupInTests.java

Print this page




  67 
  68         nonPublicType = Class.forName("p.internal.NonPublicType");
  69         assertTrue(this.getClass().getModule() == nonPublicType.getModule());
  70         assertNotEquals(this.getClass().getPackageName(), nonPublicType.getPackageName());
  71         assertFalse(Modifier.isPublic(nonPublicType.getModifiers()));
  72     }
  73 
  74     // Invoke MethodHandles.privateLookupIn with a full-power caller
  75     public void testAllAccessCallerSameModule() throws Throwable {
  76         Lookup lookup = MethodHandles.privateLookupIn(nonPublicType, MethodHandles.lookup());
  77         assertTrue(lookup.lookupClass() == nonPublicType);
  78         assertTrue(lookup.hasPrivateAccess());
  79 
  80         // get obj field
  81         MethodHandle mh = lookup.findStaticGetter(nonPublicType, "obj", Object.class);
  82         Object obj = mh.invokeExact();
  83     }
  84 
  85     // Invoke MethodHandles.privateLookupIn with a reduced-power caller
  86     public void testReducedAccessCallerSameModule() throws Throwable {
  87         // drop access
  88         Lookup caller = MethodHandles.lookup().in(publicType);
  89         assertTrue((caller.lookupModes() & PRIVATE) == 0);
  90         assertTrue((caller.lookupModes() & PACKAGE) == 0);
  91         assertTrue((caller.lookupModes() & MODULE) != 0);
  92 
  93         Lookup lookup = MethodHandles.privateLookupIn(nonPublicType, caller);
  94         assertTrue(lookup.lookupClass() == nonPublicType);
  95         assertTrue(lookup.hasPrivateAccess());
  96 
  97         // use it
  98         MethodHandle mh = lookup.findStaticGetter(nonPublicType, "obj", Object.class);
  99         Object obj = mh.invokeExact();
 100     }
 101 
 102     // Invoke MethodHandles.privateLookupIn with the public lookup as caller
 103     @Test(expectedExceptions = {IllegalAccessException.class})
 104     public void testPublicLookupSameModule() throws Exception {
 105         Lookup caller = MethodHandles.publicLookup();
 106         Lookup lookup = MethodHandles.privateLookupIn(publicType, caller);
 107     }
 108 




  67 
  68         nonPublicType = Class.forName("p.internal.NonPublicType");
  69         assertTrue(this.getClass().getModule() == nonPublicType.getModule());
  70         assertNotEquals(this.getClass().getPackageName(), nonPublicType.getPackageName());
  71         assertFalse(Modifier.isPublic(nonPublicType.getModifiers()));
  72     }
  73 
  74     // Invoke MethodHandles.privateLookupIn with a full-power caller
  75     public void testAllAccessCallerSameModule() throws Throwable {
  76         Lookup lookup = MethodHandles.privateLookupIn(nonPublicType, MethodHandles.lookup());
  77         assertTrue(lookup.lookupClass() == nonPublicType);
  78         assertTrue(lookup.hasPrivateAccess());
  79 
  80         // get obj field
  81         MethodHandle mh = lookup.findStaticGetter(nonPublicType, "obj", Object.class);
  82         Object obj = mh.invokeExact();
  83     }
  84 
  85     // Invoke MethodHandles.privateLookupIn with a reduced-power caller
  86     public void testReducedAccessCallerSameModule() throws Throwable {
  87         Lookup caller = MethodHandles.lookup().dropLookupMode(PACKAGE);

  88         assertTrue((caller.lookupModes() & PRIVATE) == 0);
  89         assertTrue((caller.lookupModes() & PACKAGE) == 0);
  90         assertTrue((caller.lookupModes() & MODULE) != 0);
  91 
  92         Lookup lookup = MethodHandles.privateLookupIn(nonPublicType, caller);
  93         assertTrue(lookup.lookupClass() == nonPublicType);
  94         assertTrue(lookup.hasPrivateAccess());
  95 
  96         // use it
  97         MethodHandle mh = lookup.findStaticGetter(nonPublicType, "obj", Object.class);
  98         Object obj = mh.invokeExact();
  99     }
 100 
 101     // Invoke MethodHandles.privateLookupIn with the public lookup as caller
 102     @Test(expectedExceptions = {IllegalAccessException.class})
 103     public void testPublicLookupSameModule() throws Exception {
 104         Lookup caller = MethodHandles.publicLookup();
 105         Lookup lookup = MethodHandles.privateLookupIn(publicType, caller);
 106     }
 107 


< prev index next >