< 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 >