< prev index next >

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

Print this page
rev 15908 : 8165271: Fix use of reflection to gain access to private fields
Reviewed-by:


  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 


< prev index next >