< prev index next >

test/jdk/java/lang/invoke/defineHiddenClass/HiddenNestmateTest.java

Print this page




  90 
  91     @Test
  92     public void hiddenNestmate() throws Throwable {
  93         // define a hidden nestmate class
  94         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE);
  95         Class<?> c = lookup.lookupClass();
  96         assertNestmate(lookup);
  97 
  98         // invoke int test(HiddenNestmateTest o) via MethodHandle
  99         MethodHandle ctor = lookup.findConstructor(c, MethodType.methodType(void.class));
 100         MethodHandle mh = lookup.findVirtual(c, "test", MethodType.methodType(int.class, HiddenNestmateTest.class));
 101         int x = (int)mh.bindTo(ctor.invoke()).invokeExact( this);
 102         assertTrue(x == privMethod());
 103 
 104         // invoke int test(HiddenNestmateTest o)
 105         int x1 = testInjectedClass(c);
 106         assertTrue(x1 == privMethod());
 107     }
 108 
 109     @Test
 110     public void hiddenWeakClass() throws Throwable {
 111         // define a weak class
 112         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE, WEAK);
 113         assertNestmate(lookup);
 114     }
 115 
 116     @Test(expectedExceptions = IllegalAccessException.class)
 117     public void noPrivateLookupAccess() throws Throwable {
 118         Lookup lookup = MethodHandles.lookup().dropLookupMode(Lookup.PRIVATE);
 119         lookup.defineHiddenClass(bytes, false, NESTMATE);
 120     }
 121 
 122     public void teleportToNestmate() throws Throwable {
 123         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE);
 124         assertNestmate(lookup);
 125 
 126         // Teleport to a hidden nestmate
 127         Lookup lc =  MethodHandles.lookup().in(lookup.lookupClass());
 128         assertTrue((lc.lookupModes() & PRIVATE) != 0);
 129         Lookup lc2 = lc.defineHiddenClass(bytes, false, NESTMATE);
 130         assertNestmate(lc2);
 131     }
 132 




  90 
  91     @Test
  92     public void hiddenNestmate() throws Throwable {
  93         // define a hidden nestmate class
  94         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE);
  95         Class<?> c = lookup.lookupClass();
  96         assertNestmate(lookup);
  97 
  98         // invoke int test(HiddenNestmateTest o) via MethodHandle
  99         MethodHandle ctor = lookup.findConstructor(c, MethodType.methodType(void.class));
 100         MethodHandle mh = lookup.findVirtual(c, "test", MethodType.methodType(int.class, HiddenNestmateTest.class));
 101         int x = (int)mh.bindTo(ctor.invoke()).invokeExact( this);
 102         assertTrue(x == privMethod());
 103 
 104         // invoke int test(HiddenNestmateTest o)
 105         int x1 = testInjectedClass(c);
 106         assertTrue(x1 == privMethod());
 107     }
 108 
 109     @Test
 110     public void hiddenStrongClass() throws Throwable {
 111         // define a hidden class strongly referenced by the class loader
 112         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE, STRONG);
 113         assertNestmate(lookup);
 114     }
 115 
 116     @Test(expectedExceptions = IllegalAccessException.class)
 117     public void noPrivateLookupAccess() throws Throwable {
 118         Lookup lookup = MethodHandles.lookup().dropLookupMode(Lookup.PRIVATE);
 119         lookup.defineHiddenClass(bytes, false, NESTMATE);
 120     }
 121 
 122     public void teleportToNestmate() throws Throwable {
 123         Lookup lookup = MethodHandles.lookup().defineHiddenClass(bytes, false, NESTMATE);
 124         assertNestmate(lookup);
 125 
 126         // Teleport to a hidden nestmate
 127         Lookup lc =  MethodHandles.lookup().in(lookup.lookupClass());
 128         assertTrue((lc.lookupModes() & PRIVATE) != 0);
 129         Lookup lc2 = lc.defineHiddenClass(bytes, false, NESTMATE);
 130         assertNestmate(lc2);
 131     }
 132 


< prev index next >