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
|