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 JavaNetInetAddressAccess javaNetInetAddressAccess;
57 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
58 private static JavaNetSocketAccess javaNetSocketAccess;
59 private static JavaNetUriAccess javaNetUriAccess;
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;
127 }
128
129 public static void setJavaLangRefAccess(JavaLangRefAccess jlra) {
130 javaLangRefAccess = jlra;
131 }
132
133 public static JavaLangRefAccess getJavaLangRefAccess() {
134 return javaLangRefAccess;
135 }
136
137 public static void setJavaNetUriAccess(JavaNetUriAccess jnua) {
138 javaNetUriAccess = jnua;
139 }
140
141 public static JavaNetUriAccess getJavaNetUriAccess() {
142 if (javaNetUriAccess == null)
143 unsafe.ensureClassInitialized(java.net.URI.class);
144 return javaNetUriAccess;
145 }
146
147 public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) {
148 javaNetInetAddressAccess = jna;
149 }
150
151 public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() {
152 if (javaNetInetAddressAccess == null)
153 unsafe.ensureClassInitialized(java.net.InetAddress.class);
154 return javaNetInetAddressAccess;
155 }
156
157 public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
158 javaNetHttpCookieAccess = a;
159 }
160
161 public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
162 if (javaNetHttpCookieAccess == null)
163 unsafe.ensureClassInitialized(java.net.HttpCookie.class);
164 return javaNetHttpCookieAccess;
165 }
166
|
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 JavaNetInetAddressAccess javaNetInetAddressAccess;
57 private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
58 private static JavaNetSocketAccess javaNetSocketAccess;
59 private static JavaNetUriAccess javaNetUriAccess;
60 private static JavaNetUrlClassLoaderAccess javaNetUrlClassLoaderAccess;
61 private static JavaNioAccess javaNioAccess;
62 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
63 private static JavaIOFilePermissionAccess javaIOFilePermissionAccess;
64 private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
65 private static JavaSecurityAccess javaSecurityAccess;
66 private static JavaUtilZipFileAccess javaUtilZipFileAccess;
67 private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
68 private static JavaAWTAccess javaAWTAccess;
69 private static JavaAWTFontAccess javaAWTFontAccess;
70 private static JavaBeansAccess javaBeansAccess;
71 private static JavaObjectInputStreamAccess javaObjectInputStreamAccess;
72 private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess;
73
74 public static JavaUtilJarAccess javaUtilJarAccess() {
75 if (javaUtilJarAccess == null) {
76 // Ensure JarFile is initialized; we know that that class
77 // provides the shared secret
78 unsafe.ensureClassInitialized(JarFile.class);
79 }
80 return javaUtilJarAccess;
128 }
129
130 public static void setJavaLangRefAccess(JavaLangRefAccess jlra) {
131 javaLangRefAccess = jlra;
132 }
133
134 public static JavaLangRefAccess getJavaLangRefAccess() {
135 return javaLangRefAccess;
136 }
137
138 public static void setJavaNetUriAccess(JavaNetUriAccess jnua) {
139 javaNetUriAccess = jnua;
140 }
141
142 public static JavaNetUriAccess getJavaNetUriAccess() {
143 if (javaNetUriAccess == null)
144 unsafe.ensureClassInitialized(java.net.URI.class);
145 return javaNetUriAccess;
146 }
147
148 public static void setJavaNetUrlClassLoaderAccess(JavaNetUrlClassLoaderAccess jnua) {
149 javaNetUrlClassLoaderAccess = jnua;
150 }
151
152 public static JavaNetUrlClassLoaderAccess getJavaNetUrlClassLoaderAccess() {
153 if (javaNetUrlClassLoaderAccess == null)
154 unsafe.ensureClassInitialized(java.net.URLClassLoader.class);
155 return javaNetUrlClassLoaderAccess;
156 }
157
158 public static void setJavaNetInetAddressAccess(JavaNetInetAddressAccess jna) {
159 javaNetInetAddressAccess = jna;
160 }
161
162 public static JavaNetInetAddressAccess getJavaNetInetAddressAccess() {
163 if (javaNetInetAddressAccess == null)
164 unsafe.ensureClassInitialized(java.net.InetAddress.class);
165 return javaNetInetAddressAccess;
166 }
167
168 public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
169 javaNetHttpCookieAccess = a;
170 }
171
172 public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
173 if (javaNetHttpCookieAccess == null)
174 unsafe.ensureClassInitialized(java.net.HttpCookie.class);
175 return javaNetHttpCookieAccess;
176 }
177
|