< prev index next >

src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java

Print this page

        

*** 42,58 **** provided through a third package to which access is restricted. This framework avoids the primary disadvantage of using reflection for this purpose, namely the loss of compile-time checking. */ public class SharedSecrets { ! private static final Unsafe unsafe = Unsafe.getUnsafe(); private static JavaUtilJarAccess javaUtilJarAccess; private static JavaLangAccess javaLangAccess; private static JavaLangModuleAccess javaLangModuleAccess; private static JavaLangReflectModuleAccess javaLangReflectModuleAccess; private static JavaLangInvokeAccess javaLangInvokeAccess; private static JavaLangRefAccess javaLangRefAccess; private static JavaIOAccess javaIOAccess; private static JavaNetAccess javaNetAccess; private static JavaNetInetAddressAccess javaNetInetAddressAccess; private static JavaNetHttpCookieAccess javaNetHttpCookieAccess; private static JavaNioAccess javaNioAccess; --- 42,61 ---- provided through a third package to which access is restricted. This framework avoids the primary disadvantage of using reflection for this purpose, namely the loss of compile-time checking. */ public class SharedSecrets { ! private static final class U { ! static final Unsafe unsafe = Unsafe.getUnsafe(); ! } private static JavaUtilJarAccess javaUtilJarAccess; private static JavaLangAccess javaLangAccess; private static JavaLangModuleAccess javaLangModuleAccess; private static JavaLangReflectModuleAccess javaLangReflectModuleAccess; private static JavaLangInvokeAccess javaLangInvokeAccess; private static JavaLangRefAccess javaLangRefAccess; + private static JavaLangThreadAccess javaLangThreadAccess; private static JavaIOAccess javaIOAccess; private static JavaNetAccess javaNetAccess; private static JavaNetInetAddressAccess javaNetInetAddressAccess; private static JavaNetHttpCookieAccess javaNetHttpCookieAccess; private static JavaNioAccess javaNioAccess;
*** 69,79 **** public static JavaUtilJarAccess javaUtilJarAccess() { if (javaUtilJarAccess == null) { // Ensure JarFile is initialized; we know that that class // provides the shared secret ! unsafe.ensureClassInitialized(JarFile.class); } return javaUtilJarAccess; } public static void setJavaUtilJarAccess(JavaUtilJarAccess access) { --- 72,82 ---- public static JavaUtilJarAccess javaUtilJarAccess() { if (javaUtilJarAccess == null) { // Ensure JarFile is initialized; we know that that class // provides the shared secret ! U.unsafe.ensureClassInitialized(JarFile.class); } return javaUtilJarAccess; } public static void setJavaUtilJarAccess(JavaUtilJarAccess access) {
*** 94,104 **** public static JavaLangInvokeAccess getJavaLangInvokeAccess() { if (javaLangInvokeAccess == null) { try { Class<?> c = Class.forName("java.lang.invoke.MemberName"); ! unsafe.ensureClassInitialized(c); } catch (ClassNotFoundException e) {}; } return javaLangInvokeAccess; } --- 97,107 ---- public static JavaLangInvokeAccess getJavaLangInvokeAccess() { if (javaLangInvokeAccess == null) { try { Class<?> c = Class.forName("java.lang.invoke.MemberName"); ! U.unsafe.ensureClassInitialized(c); } catch (ClassNotFoundException e) {}; } return javaLangInvokeAccess; }
*** 106,127 **** javaLangModuleAccess = jlrma; } public static JavaLangModuleAccess getJavaLangModuleAccess() { if (javaLangModuleAccess == null) { ! unsafe.ensureClassInitialized(ModuleDescriptor.class); } return javaLangModuleAccess; } public static void setJavaLangReflectModuleAccess(JavaLangReflectModuleAccess jlrma) { javaLangReflectModuleAccess = jlrma; } public static JavaLangReflectModuleAccess getJavaLangReflectModuleAccess() { if (javaLangReflectModuleAccess == null) ! unsafe.ensureClassInitialized(java.lang.reflect.Module.class); return javaLangReflectModuleAccess; } public static void setJavaLangRefAccess(JavaLangRefAccess jlra) { javaLangRefAccess = jlra; --- 109,130 ---- javaLangModuleAccess = jlrma; } public static JavaLangModuleAccess getJavaLangModuleAccess() { if (javaLangModuleAccess == null) { ! U.unsafe.ensureClassInitialized(ModuleDescriptor.class); } return javaLangModuleAccess; } public static void setJavaLangReflectModuleAccess(JavaLangReflectModuleAccess jlrma) { javaLangReflectModuleAccess = jlrma; } public static JavaLangReflectModuleAccess getJavaLangReflectModuleAccess() { if (javaLangReflectModuleAccess == null) ! U.unsafe.ensureClassInitialized(java.lang.reflect.Module.class); return javaLangReflectModuleAccess; } public static void setJavaLangRefAccess(JavaLangRefAccess jlra) { javaLangRefAccess = jlra;
*** 129,165 **** public static JavaLangRefAccess getJavaLangRefAccess() { return javaLangRefAccess; } public static void setJavaNetAccess(JavaNetAccess jna) { javaNetAccess = jna; } public static JavaNetAccess getJavaNetAccess() { if (javaNetAccess == null) ! unsafe.ensureClassInitialized(java.net.URLClassLoader.class); return javaNetAccess; } public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) { javaNetInetAddressAccess = jna; } public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() { if (javaNetInetAddressAccess == null) ! unsafe.ensureClassInitialized(java.net.InetAddress.class); return javaNetInetAddressAccess; } public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) { javaNetHttpCookieAccess = a; } public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() { if (javaNetHttpCookieAccess == null) ! unsafe.ensureClassInitialized(java.net.HttpCookie.class); return javaNetHttpCookieAccess; } public static void setJavaNioAccess(JavaNioAccess jna) { javaNioAccess = jna; --- 132,176 ---- public static JavaLangRefAccess getJavaLangRefAccess() { return javaLangRefAccess; } + public static void setJavaLangThreadAccess(JavaLangThreadAccess jlta) { + SharedSecrets.javaLangThreadAccess = jlta; + } + + public static JavaLangThreadAccess getJavaLangThreadAccess() { + return javaLangThreadAccess; + } + public static void setJavaNetAccess(JavaNetAccess jna) { javaNetAccess = jna; } public static JavaNetAccess getJavaNetAccess() { if (javaNetAccess == null) ! U.unsafe.ensureClassInitialized(java.net.URLClassLoader.class); return javaNetAccess; } public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) { javaNetInetAddressAccess = jna; } public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() { if (javaNetInetAddressAccess == null) ! U.unsafe.ensureClassInitialized(java.net.InetAddress.class); return javaNetInetAddressAccess; } public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) { javaNetHttpCookieAccess = a; } public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() { if (javaNetHttpCookieAccess == null) ! U.unsafe.ensureClassInitialized(java.net.HttpCookie.class); return javaNetHttpCookieAccess; } public static void setJavaNioAccess(JavaNioAccess jna) { javaNioAccess = jna;
*** 168,200 **** public static JavaNioAccess getJavaNioAccess() { if (javaNioAccess == null) { // Ensure java.nio.ByteOrder is initialized; we know that // this class initializes java.nio.Bits that provides the // shared secret. ! unsafe.ensureClassInitialized(java.nio.ByteOrder.class); } return javaNioAccess; } public static void setJavaIOAccess(JavaIOAccess jia) { javaIOAccess = jia; } public static JavaIOAccess getJavaIOAccess() { if (javaIOAccess == null) { ! unsafe.ensureClassInitialized(Console.class); } return javaIOAccess; } public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) { javaIOFileDescriptorAccess = jiofda; } public static JavaIOFileDescriptorAccess getJavaIOFileDescriptorAccess() { if (javaIOFileDescriptorAccess == null) ! unsafe.ensureClassInitialized(FileDescriptor.class); return javaIOFileDescriptorAccess; } public static void setJavaSecurityProtectionDomainAccess --- 179,211 ---- public static JavaNioAccess getJavaNioAccess() { if (javaNioAccess == null) { // Ensure java.nio.ByteOrder is initialized; we know that // this class initializes java.nio.Bits that provides the // shared secret. ! U.unsafe.ensureClassInitialized(java.nio.ByteOrder.class); } return javaNioAccess; } public static void setJavaIOAccess(JavaIOAccess jia) { javaIOAccess = jia; } public static JavaIOAccess getJavaIOAccess() { if (javaIOAccess == null) { ! U.unsafe.ensureClassInitialized(Console.class); } return javaIOAccess; } public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) { javaIOFileDescriptorAccess = jiofda; } public static JavaIOFileDescriptorAccess getJavaIOFileDescriptorAccess() { if (javaIOFileDescriptorAccess == null) ! U.unsafe.ensureClassInitialized(FileDescriptor.class); return javaIOFileDescriptorAccess; } public static void setJavaSecurityProtectionDomainAccess
*** 203,230 **** } public static JavaSecurityProtectionDomainAccess getJavaSecurityProtectionDomainAccess() { if (javaSecurityProtectionDomainAccess == null) ! unsafe.ensureClassInitialized(ProtectionDomain.class); return javaSecurityProtectionDomainAccess; } public static void setJavaSecurityAccess(JavaSecurityAccess jsa) { javaSecurityAccess = jsa; } public static JavaSecurityAccess getJavaSecurityAccess() { if (javaSecurityAccess == null) { ! unsafe.ensureClassInitialized(AccessController.class); } return javaSecurityAccess; } public static JavaUtilZipFileAccess getJavaUtilZipFileAccess() { if (javaUtilZipFileAccess == null) ! unsafe.ensureClassInitialized(java.util.zip.ZipFile.class); return javaUtilZipFileAccess; } public static void setJavaUtilZipFileAccess(JavaUtilZipFileAccess access) { javaUtilZipFileAccess = access; --- 214,241 ---- } public static JavaSecurityProtectionDomainAccess getJavaSecurityProtectionDomainAccess() { if (javaSecurityProtectionDomainAccess == null) ! U.unsafe.ensureClassInitialized(ProtectionDomain.class); return javaSecurityProtectionDomainAccess; } public static void setJavaSecurityAccess(JavaSecurityAccess jsa) { javaSecurityAccess = jsa; } public static JavaSecurityAccess getJavaSecurityAccess() { if (javaSecurityAccess == null) { ! U.unsafe.ensureClassInitialized(AccessController.class); } return javaSecurityAccess; } public static JavaUtilZipFileAccess getJavaUtilZipFileAccess() { if (javaUtilZipFileAccess == null) ! U.unsafe.ensureClassInitialized(java.util.zip.ZipFile.class); return javaUtilZipFileAccess; } public static void setJavaUtilZipFileAccess(JavaUtilZipFileAccess access) { javaUtilZipFileAccess = access;
*** 266,276 **** javaUtilResourceBundleAccess = access; } public static JavaObjectInputStreamAccess getJavaObjectInputStreamAccess() { if (javaObjectInputStreamAccess == null) { ! unsafe.ensureClassInitialized(ObjectInputStream.class); } return javaObjectInputStreamAccess; } public static void setJavaObjectInputStreamAccess(JavaObjectInputStreamAccess access) { --- 277,287 ---- javaUtilResourceBundleAccess = access; } public static JavaObjectInputStreamAccess getJavaObjectInputStreamAccess() { if (javaObjectInputStreamAccess == null) { ! U.unsafe.ensureClassInitialized(ObjectInputStream.class); } return javaObjectInputStreamAccess; } public static void setJavaObjectInputStreamAccess(JavaObjectInputStreamAccess access) {
*** 281,290 **** javaIORandomAccessFileAccess = jirafa; } public static JavaIORandomAccessFileAccess getJavaIORandomAccessFileAccess() { if (javaIORandomAccessFileAccess == null) { ! unsafe.ensureClassInitialized(RandomAccessFile.class); } return javaIORandomAccessFileAccess; } } --- 292,301 ---- javaIORandomAccessFileAccess = jirafa; } public static JavaIORandomAccessFileAccess getJavaIORandomAccessFileAccess() { if (javaIORandomAccessFileAccess == null) { ! U.unsafe.ensureClassInitialized(RandomAccessFile.class); } return javaIORandomAccessFileAccess; } }
< prev index next >