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 JavaNioAccess javaNioAccess;
59 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
60 private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
61 private static JavaSecurityAccess javaSecurityAccess;
62 private static JavaUtilZipFileAccess javaUtilZipFileAccess;
63 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
64 private static JavaAWTAccess javaAWTAccess;
65 private static JavaAWTFontAccess javaAWTFontAccess;
66 private static JavaBeansAccess javaBeansAccess;
67 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess;
68 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess;
69
70 public static JavaUtilJarAccess javaUtilJarAccess() {
71 if (javaUtilJarAccess == null) {
72 // Ensure JarFile is initialized; we know that that class
73 // provides the shared secret
74 unsafe.ensureClassInitialized(JarFile.class);
75 }
76 return javaUtilJarAccess;
77 }
144 public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) {
145 javaNetInetAddressAccess = jna;
146 }
147
148 public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() {
149 if (javaNetInetAddressAccess == null)
150 unsafe.ensureClassInitialized(java.net.InetAddress.class);
151 return javaNetInetAddressAccess;
152 }
153
154 public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
155 javaNetHttpCookieAccess = a;
156 }
157
158 public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
159 if (javaNetHttpCookieAccess == null)
160 unsafe.ensureClassInitialized(java.net.HttpCookie.class);
161 return javaNetHttpCookieAccess;
162 }
163
164 public static void setJavaNioAccess(JavaNioAccess jna) {
165 javaNioAccess = jna;
166 }
167
168 public static JavaNioAccess getJavaNioAccess() {
169 if (javaNioAccess == null) {
170 // Ensure java.nio.ByteOrder is initialized; we know that
171 // this class initializes java.nio.Bits that provides the
172 // shared secret.
173 unsafe.ensureClassInitialized(java.nio.ByteOrder.class);
174 }
175 return javaNioAccess;
176 }
177
178 public static void setJavaIOAccess(JavaIOAccess jia) {
179 javaIOAccess = jia;
180 }
181
182 public static JavaIOAccess getJavaIOAccess() {
183 if (javaIOAccess == null) {
|
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 }
145 public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) {
146 javaNetInetAddressAccess = jna;
147 }
148
149 public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() {
150 if (javaNetInetAddressAccess == null)
151 unsafe.ensureClassInitialized(java.net.InetAddress.class);
152 return javaNetInetAddressAccess;
153 }
154
155 public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
156 javaNetHttpCookieAccess = a;
157 }
158
159 public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
160 if (javaNetHttpCookieAccess == null)
161 unsafe.ensureClassInitialized(java.net.HttpCookie.class);
162 return javaNetHttpCookieAccess;
163 }
164
165 public static void setJavaNetSocketAccess(JavaNetSocketAccess jnsa) {
166 javaNetSocketAccess = jnsa;
167 }
168
169 public static JavaNetSocketAccess getJavaNetSocketAccess() {
170 if (javaNetSocketAccess == null)
171 unsafe.ensureClassInitialized(java.net.ServerSocket.class);
172 return javaNetSocketAccess;
173 }
174
175 public static void setJavaNioAccess(JavaNioAccess jna) {
176 javaNioAccess = jna;
177 }
178
179 public static JavaNioAccess getJavaNioAccess() {
180 if (javaNioAccess == null) {
181 // Ensure java.nio.ByteOrder is initialized; we know that
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) {
|