33 import java.io.Console; 34 import java.io.FileDescriptor; 35 import java.io.FilePermission; 36 import java.io.ObjectInputStream; 37 import java.io.RandomAccessFile; 38 import java.security.ProtectionDomain; 39 import java.security.Signature; 40 import jdk.internal.misc.Unsafe; 41 42 /** A repository of "shared secrets", which are a mechanism for 43 calling implementation-private methods in another package without 44 using reflection. A package-private class implements a public 45 interface and provides the ability to call package-private methods 46 within that package; the object implementing that interface is 47 provided through a third package to which access is restricted. 48 This framework avoids the primary disadvantage of using reflection 49 for this purpose, namely the loss of compile-time checking. */ 50 51 public class SharedSecrets { 52 private static final Unsafe unsafe = Unsafe.getUnsafe(); 53 private static JavaUtilJarAccess javaUtilJarAccess; 54 private static JavaLangAccess javaLangAccess; 55 private static JavaLangModuleAccess javaLangModuleAccess; 56 private static JavaLangInvokeAccess javaLangInvokeAccess; 57 private static JavaLangRefAccess javaLangRefAccess; 58 private static JavaIOAccess javaIOAccess; 59 private static JavaNetInetAddressAccess javaNetInetAddressAccess; 60 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess; 61 private static JavaNetSocketAccess javaNetSocketAccess; 62 private static JavaNetUriAccess javaNetUriAccess; 63 private static JavaNetURLAccess javaNetURLAccess; 64 private static JavaNetURLClassLoaderAccess javaNetURLClassLoaderAccess; 65 private static JavaNioAccess javaNioAccess; 66 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess; 67 private static JavaIOFilePermissionAccess javaIOFilePermissionAccess; 68 private static JavaSecurityAccess javaSecurityAccess; 69 private static JavaUtilZipFileAccess javaUtilZipFileAccess; 70 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess; 71 private static JavaAWTAccess javaAWTAccess; 72 private static JavaAWTFontAccess javaAWTFontAccess; 73 private static JavaBeansAccess javaBeansAccess; 74 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess; 75 private static JavaObjectInputFilterAccess javaObjectInputFilterAccess; 76 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess; 77 private static JavaSecuritySignatureAccess javaSecuritySignatureAccess; 78 private static JavaxCryptoSealedObjectAccess javaxCryptoSealedObjectAccess; 79 80 public static JavaUtilJarAccess javaUtilJarAccess() { 81 if (javaUtilJarAccess == null) { 82 // Ensure JarFile is initialized; we know that this class 83 // provides the shared secret 84 unsafe.ensureClassInitialized(JarFile.class); 85 } 86 return javaUtilJarAccess; 87 } 88 89 public static void setJavaUtilJarAccess(JavaUtilJarAccess access) { 90 javaUtilJarAccess = access; 91 } 92 93 public static void setJavaLangAccess(JavaLangAccess jla) { 94 javaLangAccess = jla; 95 } 96 114 115 public static void setJavaLangModuleAccess(JavaLangModuleAccess jlrma) { 116 javaLangModuleAccess = jlrma; 117 } 118 119 public static JavaLangModuleAccess getJavaLangModuleAccess() { 120 if (javaLangModuleAccess == null) { 121 unsafe.ensureClassInitialized(ModuleDescriptor.class); 122 } 123 return javaLangModuleAccess; 124 } 125 126 public static void setJavaLangRefAccess(JavaLangRefAccess jlra) { 127 javaLangRefAccess = jlra; 128 } 129 130 public static JavaLangRefAccess getJavaLangRefAccess() { 131 return javaLangRefAccess; 132 } 133 134 public static void setJavaNetUriAccess(JavaNetUriAccess jnua) { 135 javaNetUriAccess = jnua; 136 } 137 138 public static JavaNetUriAccess getJavaNetUriAccess() { 139 if (javaNetUriAccess == null) 140 unsafe.ensureClassInitialized(java.net.URI.class); 141 return javaNetUriAccess; 142 } 143 144 public static void setJavaNetURLAccess(JavaNetURLAccess jnua) { 145 javaNetURLAccess = jnua; 146 } 147 148 public static JavaNetURLAccess getJavaNetURLAccess() { 149 if (javaNetURLAccess == null) 150 unsafe.ensureClassInitialized(java.net.URL.class); 151 return javaNetURLAccess; 152 } 153 | 33 import java.io.Console; 34 import java.io.FileDescriptor; 35 import java.io.FilePermission; 36 import java.io.ObjectInputStream; 37 import java.io.RandomAccessFile; 38 import java.security.ProtectionDomain; 39 import java.security.Signature; 40 import jdk.internal.misc.Unsafe; 41 42 /** A repository of "shared secrets", which are a mechanism for 43 calling implementation-private methods in another package without 44 using reflection. A package-private class implements a public 45 interface and provides the ability to call package-private methods 46 within that package; the object implementing that interface is 47 provided through a third package to which access is restricted. 48 This framework avoids the primary disadvantage of using reflection 49 for this purpose, namely the loss of compile-time checking. */ 50 51 public class SharedSecrets { 52 private static final Unsafe unsafe = Unsafe.getUnsafe(); 53 private static JavaAWTAccess javaAWTAccess; 54 private static JavaAWTFontAccess javaAWTFontAccess; 55 private static JavaBeansAccess javaBeansAccess; 56 private static JavaLangAccess javaLangAccess; 57 private static JavaLangInvokeAccess javaLangInvokeAccess; 58 private static JavaLangModuleAccess javaLangModuleAccess; 59 private static JavaLangRefAccess javaLangRefAccess; 60 private static JavaLangReflectAccess javaLangReflectAccess; 61 private static JavaIOAccess javaIOAccess; 62 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess; 63 private static JavaIOFilePermissionAccess javaIOFilePermissionAccess; 64 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess; 65 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess; 66 private static JavaObjectInputFilterAccess javaObjectInputFilterAccess; 67 private static JavaNetInetAddressAccess javaNetInetAddressAccess; 68 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess; 69 private static JavaNetSocketAccess javaNetSocketAccess; 70 private static JavaNetUriAccess javaNetUriAccess; 71 private static JavaNetURLAccess javaNetURLAccess; 72 private static JavaNetURLClassLoaderAccess javaNetURLClassLoaderAccess; 73 private static JavaNioAccess javaNioAccess; 74 private static JavaUtilJarAccess javaUtilJarAccess; 75 private static JavaUtilZipFileAccess javaUtilZipFileAccess; 76 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess; 77 private static JavaSecurityAccess javaSecurityAccess; 78 private static JavaSecuritySignatureAccess javaSecuritySignatureAccess; 79 private static JavaxCryptoSealedObjectAccess javaxCryptoSealedObjectAccess; 80 81 public static JavaUtilJarAccess javaUtilJarAccess() { 82 if (javaUtilJarAccess == null) { 83 // Ensure JarFile is initialized; we know that this class 84 // provides the shared secret 85 unsafe.ensureClassInitialized(JarFile.class); 86 } 87 return javaUtilJarAccess; 88 } 89 90 public static void setJavaUtilJarAccess(JavaUtilJarAccess access) { 91 javaUtilJarAccess = access; 92 } 93 94 public static void setJavaLangAccess(JavaLangAccess jla) { 95 javaLangAccess = jla; 96 } 97 115 116 public static void setJavaLangModuleAccess(JavaLangModuleAccess jlrma) { 117 javaLangModuleAccess = jlrma; 118 } 119 120 public static JavaLangModuleAccess getJavaLangModuleAccess() { 121 if (javaLangModuleAccess == null) { 122 unsafe.ensureClassInitialized(ModuleDescriptor.class); 123 } 124 return javaLangModuleAccess; 125 } 126 127 public static void setJavaLangRefAccess(JavaLangRefAccess jlra) { 128 javaLangRefAccess = jlra; 129 } 130 131 public static JavaLangRefAccess getJavaLangRefAccess() { 132 return javaLangRefAccess; 133 } 134 135 public static void setJavaLangReflectAccess(JavaLangReflectAccess jlra) { 136 javaLangReflectAccess = jlra; 137 } 138 139 public static JavaLangReflectAccess getJavaLangReflectAccess() { 140 return javaLangReflectAccess; 141 } 142 143 public static void setJavaNetUriAccess(JavaNetUriAccess jnua) { 144 javaNetUriAccess = jnua; 145 } 146 147 public static JavaNetUriAccess getJavaNetUriAccess() { 148 if (javaNetUriAccess == null) 149 unsafe.ensureClassInitialized(java.net.URI.class); 150 return javaNetUriAccess; 151 } 152 153 public static void setJavaNetURLAccess(JavaNetURLAccess jnua) { 154 javaNetURLAccess = jnua; 155 } 156 157 public static JavaNetURLAccess getJavaNetURLAccess() { 158 if (javaNetURLAccess == null) 159 unsafe.ensureClassInitialized(java.net.URL.class); 160 return javaNetURLAccess; 161 } 162 |