12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.misc;
27
28 import java.lang.module.ModuleDescriptor;
29 import java.util.jar.JarFile;
30 import java.io.Console;
31 import java.io.FileDescriptor;
32 import java.io.ObjectInputStream;
33 import java.io.RandomAccessFile;
34 import java.security.ProtectionDomain;
35 import java.security.AccessController;
36
37 /** A repository of "shared secrets", which are a mechanism for
38 calling implementation-private methods in another package without
39 using reflection. A package-private class implements a public
40 interface and provides the ability to call package-private methods
41 within that package; the object implementing that interface is
42 provided through a third package to which access is restricted.
43 This framework avoids the primary disadvantage of using reflection
44 for this purpose, namely the loss of compile-time checking. */
45
46 public class SharedSecrets {
47 private static final Unsafe unsafe = Unsafe.getUnsafe();
48 private static JavaUtilJarAccess javaUtilJarAccess;
49 private static JavaLangAccess javaLangAccess;
50 private static JavaLangModuleAccess javaLangModuleAccess;
51 private static JavaLangReflectModuleAccess javaLangReflectModuleAccess;
52 private static JavaLangInvokeAccess javaLangInvokeAccess;
53 private static JavaLangRefAccess javaLangRefAccess;
54 private static JavaIOAccess javaIOAccess;
55 private static JavaNetAccess javaNetAccess;
56 private static JavaNetInetAddressAccess javaNetInetAddressAccess;
57 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
58 private static JavaNetSocketAccess javaNetSocketAccess;
59 private static JavaNioAccess javaNioAccess;
60 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
61 private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
62 private static JavaSecurityAccess javaSecurityAccess;
63 private static JavaUtilZipFileAccess javaUtilZipFileAccess;
64 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
65 private static JavaAWTAccess javaAWTAccess;
66 private static JavaAWTFontAccess javaAWTFontAccess;
67 private static JavaBeansAccess javaBeansAccess;
68 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess;
69 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess;
70
71 public static JavaUtilJarAccess javaUtilJarAccess() {
72 if (javaUtilJarAccess == null) {
73 // Ensure JarFile is initialized; we know that that class
74 // provides the shared secret
75 unsafe.ensureClassInitialized(JarFile.class);
76 }
77 return javaUtilJarAccess;
78 }
79
80 public static void setJavaUtilJarAccess(JavaUtilJarAccess access) {
182 // this class initializes java.nio.Bits that provides the
183 // shared secret.
184 unsafe.ensureClassInitialized(java.nio.ByteOrder.class);
185 }
186 return javaNioAccess;
187 }
188
189 public static void setJavaIOAccess(JavaIOAccess jia) {
190 javaIOAccess = jia;
191 }
192
193 public static JavaIOAccess getJavaIOAccess() {
194 if (javaIOAccess == null) {
195 unsafe.ensureClassInitialized(Console.class);
196 }
197 return javaIOAccess;
198 }
199
200 public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) {
201 javaIOFileDescriptorAccess = jiofda;
202 }
203
204 public static JavaIOFileDescriptorAccess getJavaIOFileDescriptorAccess() {
205 if (javaIOFileDescriptorAccess == null)
206 unsafe.ensureClassInitialized(FileDescriptor.class);
207
208 return javaIOFileDescriptorAccess;
209 }
210
211 public static void setJavaSecurityProtectionDomainAccess
212 (JavaSecurityProtectionDomainAccess jspda) {
213 javaSecurityProtectionDomainAccess = jspda;
214 }
215
216 public static JavaSecurityProtectionDomainAccess
217 getJavaSecurityProtectionDomainAccess() {
218 if (javaSecurityProtectionDomainAccess == null)
219 unsafe.ensureClassInitialized(ProtectionDomain.class);
220 return javaSecurityProtectionDomainAccess;
221 }
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.misc;
27
28 import java.lang.module.ModuleDescriptor;
29 import java.util.jar.JarFile;
30 import java.io.Console;
31 import java.io.FileDescriptor;
32 import java.io.FilePermission;
33 import java.io.ObjectInputStream;
34 import java.io.RandomAccessFile;
35 import java.security.ProtectionDomain;
36 import java.security.AccessController;
37
38 /** A repository of "shared secrets", which are a mechanism for
39 calling implementation-private methods in another package without
40 using reflection. A package-private class implements a public
41 interface and provides the ability to call package-private methods
42 within that package; the object implementing that interface is
43 provided through a third package to which access is restricted.
44 This framework avoids the primary disadvantage of using reflection
45 for this purpose, namely the loss of compile-time checking. */
46
47 public class SharedSecrets {
48 private static final Unsafe unsafe = Unsafe.getUnsafe();
49 private static JavaUtilJarAccess javaUtilJarAccess;
50 private static JavaLangAccess javaLangAccess;
51 private static JavaLangModuleAccess javaLangModuleAccess;
52 private static JavaLangReflectModuleAccess javaLangReflectModuleAccess;
53 private static JavaLangInvokeAccess javaLangInvokeAccess;
54 private static JavaLangRefAccess javaLangRefAccess;
55 private static JavaIOAccess javaIOAccess;
56 private static JavaNetAccess javaNetAccess;
57 private static JavaNetInetAddressAccess javaNetInetAddressAccess;
58 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
59 private static JavaNetSocketAccess javaNetSocketAccess;
60 private static JavaNioAccess javaNioAccess;
61 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
62 private static JavaIOFilePermissionAccess javaIOFilePermissionAccess;
63 private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
64 private static JavaSecurityAccess javaSecurityAccess;
65 private static JavaUtilZipFileAccess javaUtilZipFileAccess;
66 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
67 private static JavaAWTAccess javaAWTAccess;
68 private static JavaAWTFontAccess javaAWTFontAccess;
69 private static JavaBeansAccess javaBeansAccess;
70 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess;
71 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess;
72
73 public static JavaUtilJarAccess javaUtilJarAccess() {
74 if (javaUtilJarAccess == null) {
75 // Ensure JarFile is initialized; we know that that class
76 // provides the shared secret
77 unsafe.ensureClassInitialized(JarFile.class);
78 }
79 return javaUtilJarAccess;
80 }
81
82 public static void setJavaUtilJarAccess(JavaUtilJarAccess access) {
184 // this class initializes java.nio.Bits that provides the
185 // shared secret.
186 unsafe.ensureClassInitialized(java.nio.ByteOrder.class);
187 }
188 return javaNioAccess;
189 }
190
191 public static void setJavaIOAccess(JavaIOAccess jia) {
192 javaIOAccess = jia;
193 }
194
195 public static JavaIOAccess getJavaIOAccess() {
196 if (javaIOAccess == null) {
197 unsafe.ensureClassInitialized(Console.class);
198 }
199 return javaIOAccess;
200 }
201
202 public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) {
203 javaIOFileDescriptorAccess = jiofda;
204 }
205
206 public static JavaIOFilePermissionAccess getJavaIOFilePermissionAccess() {
207 if (javaIOFilePermissionAccess == null)
208 unsafe.ensureClassInitialized(FilePermission.class);
209
210 return javaIOFilePermissionAccess;
211 }
212
213 public static void setJavaIOFilePermissionAccess(JavaIOFilePermissionAccess jiofpa) {
214 javaIOFilePermissionAccess = jiofpa;
215 }
216
217 public static JavaIOFileDescriptorAccess getJavaIOFileDescriptorAccess() {
218 if (javaIOFileDescriptorAccess == null)
219 unsafe.ensureClassInitialized(FileDescriptor.class);
220
221 return javaIOFileDescriptorAccess;
222 }
223
224 public static void setJavaSecurityProtectionDomainAccess
225 (JavaSecurityProtectionDomainAccess jspda) {
226 javaSecurityProtectionDomainAccess = jspda;
227 }
228
229 public static JavaSecurityProtectionDomainAccess
230 getJavaSecurityProtectionDomainAccess() {
231 if (javaSecurityProtectionDomainAccess == null)
232 unsafe.ensureClassInitialized(ProtectionDomain.class);
233 return javaSecurityProtectionDomainAccess;
234 }
|